0

嗨,我从一些用户那里得到以下错误:'where 子句'中的未知列'c63rd321' 它适用于一个用户,但它对所有其他用户没有任何想法?

$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 回答