无法跟踪错误导致的PHP页面更新MS SQL数据库


Cant track error cause in PHP page updating a MS SQL database

简单的PHP页面(我不是PHP专家,只是学习)更新MS SQL数据库。下面的代码生成了一个我不知道如何解决的错误。

    include '/connections/SFU.php';
$query = "UPDATE Person SET PhotoURL = '".$file["name"]."' WHERE USERID='".$_REQUEST['user_id']."';";
if ($result =  odbc_exec($dbconnect, $query)) {
    echo "// Success!";
}
else {
    echo "// Failure!";
}
odbc_close($dbconnect);
//End Update

每次在"if ($result…"部分

但是,如果我运行几乎相同的代码

    include '/connections/SFU.php';
$query = "UPDATE Person SET PhotoURL = '89990.jpg' WHERE USERID='80'";
if ($result =  odbc_exec($dbconnect, $query)) {
// Success!
}
else {
// Failure!
} 
odbc_close($dbconnect);
//End Update

它工作得很好。我已经将$query字符串回显到屏幕上,并且两者的字符串是相同的。我不明白为什么一个失败了,另一个却没有?

同样奇怪的是,当我使用参数化查询,如

include '/connections/SFU.php';
$query = "UPDATE dbo.Person SET PhotoURL=? WHERE USERID=?";
if ($res = odbc_prepare($dbconnect,$query)) {
    echo "Prepare Success";
} else {
    echo "Prepare Failed".odbc_errormsg();
}
$uid = $_REQUEST['user_id'];
$fn = $file["name"];
echo "query=".$query." userid=".$uid." filename=".$fn;  
if ($result =  odbc_exec($res, array($fn, $uid))) {     
    echo "// Success!";
}
else {
    echo odbc_errormsg();
    echo "// Failure!";
}
odbc_close($dbconnect);

查询在上面的prepare部分失败,但在下面的odbc_exec部分失败:

include '/connections/SFU.php';
$query = "UPDATE Person SET PhotoURL=? WHERE USERID=?";
if ($res = odbc_prepare($dbconnect,$query)) {
    echo "Prepare Success";
} else {
    echo "Prepare Failed".odbc_errormsg();
}
$uid = "80";
$fn = "samplefile.jpg";
echo "query=".$query." userid=".$uid." filename=".$fn;  
if ($result =  odbc_exec($res, array($fn, $uid))) {     
    echo "// Success!";
}
else {
    echo odbc_errormsg();
    echo "// Failure!";
}
odbc_close($dbconnect);

在所有情况下,我没有得到任何odbc_errormsg()。

从查询中删除额外的;

$query = "UPDATE Person SET PhotoURL = '".$file["name"]."' WHERE
          USERID='".$_REQUEST['user_id']."';";
                                           ^

所以你的查询应该是

$query = "UPDATE Person SET PhotoURL = '".$file["name"]."' WHERE
          USERID='".$_REQUEST['user_id'];

也要练习使用odbc_errormsg(),这样你就可以更好地了解为什么你的查询失败了。

警告:您的代码容易受到sql注入攻击!