0

MS SQL データベースを更新するための単純な PHP ページ (私は PHP の専門家ではなく、学習中です)。次のコードは、解決方法がわからないエラーを生成します。

    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);

クエリは上記の準備セクションで失敗しますが、以下の 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 () を取得しません。

4

1 に答える 1

1

クエリから余分なものを削除し;ます。

$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 インジェクション攻撃に対して脆弱です!

于 2013-04-25T16:27:57.020 に答える