0

すべてのユーザーが自分の概要ページを更新できるようにしたいと考えています。これは、MySQL の更新を照会するために PHP で使用している文字列です。エラーが発生しています。私は何を間違っていますか?

$insert_query= "UPDATE user_info SET bio= $bio_ans, residence= $residence_ans, work=   
$work_ans WHERE user_id= $user_id";
mysqli_query($connect, $insert_query)
    or die('error with query1');
4

4 に答える 4

2

更新値が整数でない場合は、値を引用符で囲む必要があります。

   $insert_query= "UPDATE user_info 
                   SET bio= '$bio_ans', 
                   residence= '$residence_ans', 
                   work = '$work_ans' WHERE user_id= '$user_id'";
mysqli_query($connect, $insert_query)
or die('error with query1');
于 2012-04-11T22:15:40.427 に答える
0
$insert_query= "UPDATE user_info SET bio= $bio_ans, residence= $residence_ans, work=$work_ans WHERE user_id= $user_id";
mysqli_query($connect, $insert_query)
    or die('error: $mysqli->error');

は、$mysqli->error何が問題だったかを具体的に知らせてくれます。

于 2012-04-11T22:17:29.850 に答える
0

$insert_query= "UPDATE user_info SET bio='" . $bio_ans. "', 住居='" . $residence_ans."', work=
'".$work_ans."' WHERE user_id= '$user_id'"; mysqli_query($connect, $insert_query) or die('error with query1');

于 2012-04-11T22:18:06.123 に答える
0

( RPMで示されるように) 引用符がないことに加えて、本当に間違っているのは、変数補間を使用して SQL クエリを作成することです。

これは、数値変数に対してのみ許容され、使用する直前に強制的に数値型にキャストした場合にのみ許容されます。文字列エスケープはおそらく安全ですが、非常にエラーが発生しやすくなります (2 回実行する、新しい値を追加するときに追加するのを忘れるなど)。SQL インジェクションは、Web アプリをクラックする最も簡単な方法です。

パラメーター バインディングで準備済みステートメントを使用すれば、安全です。

于 2012-04-11T22:25:56.550 に答える