'where子句'中的未知列'c63rd321'

时间:2013-07-19 11:33:02

标签: php mysql

您好我在某些用户中遇到以下错误:'where子句'中的未知列'c63rd321'适用于一个用户,但它并不适用于所有其他用户的任何想法?

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

我是否需要添加到users.id =“”为什么它适用于一个用户而不适用于其他用户

3 个答案:

答案 0 :(得分: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以及

答案 1 :(得分: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添加到预准备的语句参数中。如果您的图书馆不支持准备好的陈述,请随时询问更多详细信息,但您应该考虑转向更好的图书馆。

答案 2 :(得分:0)

你的user_id总是整数吗?如果是这样,您不需要添加引号。但形成你的问题,我可以猜测,它可以是字符串。您可以使用mysql_real_escape_string()作为快速衡量标准(http://php.net/manual/en/function.mysql-real-escape-string.php)。

但是,正如您可能从之前的答案中知道的那样,如果使用mysqli或PDO重写它会好得多。但它应该很复杂,也许需要一些时间。