こんにちは、一部のユーザーから次のエラーが表示されます。「where句」の不明な列「c63rd321」は、1人のユーザーには機能しますが、他のすべてのユーザーには機能しませんか?
$query = 'SELECT first_name,last_name,is_admin FROM '.$database.'.users WHERE users.id='.$user_id.' LIMIT 1';
users.id="" に追加する必要があるのはなぜですか?
$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 にも当てはまります)
これを置き換えてください:
$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
...そして、準備済みステートメントのパラメーターに追加します。ライブラリが準備済みステートメントをサポートしていない場合は、詳細についてお気軽にお問い合わせください。ただし、より優れたライブラリへの切り替えを検討する必要があります。
user_id は常に整数ですか? その場合、引用符を追加する必要はありません。しかし、あなたの質問から、どういうわけか文字列になる可能性があると推測できます。簡単な方法として使用できますmysql_real_escape_string()
( http://php.net/manual/en/function.mysql-real-escape-string.php )。
しかし、以前の回答からわかるように、mysqli または PDO で書き直した方がはるかに優れています。しかし、それは複雑で、おそらく時間がかかるでしょう。