0

こんにちは、一部のユーザーから次のエラーが表示されます。「where句」の不明な列「c63rd321」は、1人のユーザーには機能しますが、他のすべてのユーザーには機能しませんか?

$query = 'SELECT first_name,last_name,is_admin FROM '.$database.'.users WHERE users.id='.$user_id.' LIMIT 1';

users.id="" に追加する必要があるのはなぜですか?

4

3 に答える 3

5

$user_id文字列 ( ) のように見えますが"c63fb321"、整数ではありません。引用符を使用する (そしてエスケープ!)

$query = 'SELECT first_name,last_name,is_admin FROM '.$database.'.users WHERE users.id="'.mysql_real_escape_string($user_id).'" LIMIT 1';

(ここでは関数を想定していmysql_ますが、これは PDO と mysqli にも当てはまります

于 2013-07-19T11:35:23.507 に答える
1

これを置き換えてください:

$query = 'SELECT first_name,last_name,is_admin FROM '.$database.'.users WHERE users.id='.$user_id.' LIMIT 1';

... これとともに:

$query = 'SELECT first_name,last_name,is_admin FROM '.$database.'.users WHERE users.id=:user_id LIMIT 1';
                                                                                       ^^^^^^^^

user_id...そして、準備済みステートメントのパラメーターに追加します。ライブラリが準備済みステートメントをサポートしていない場合は、詳細についてお気軽にお問い合わせください。ただし、より優れたライブラリへの切り替えを検討する必要があります。

于 2013-07-19T11:38:10.553 に答える
0

user_id は常に整数ですか? その場合、引用符を追加する必要はありません。しかし、あなたの質問から、どういうわけか文字列になる可能性があると推測できます。簡単な方法として使用できますmysql_real_escape_string()( http://php.net/manual/en/function.mysql-real-escape-string.php )。

しかし、以前の回答からわかるように、mysqli または PDO で書き直した方がはるかに優れています。しかし、それは複雑で、おそらく時間がかかるでしょう。

于 2013-07-19T12:41:40.630 に答える