您好我在某些用户中遇到以下错误:'where子句'中的未知列'c63rd321'适用于一个用户,但它并不适用于所有其他用户的任何想法?
$query = 'SELECT first_name,last_name,is_admin FROM '.$database.'.users WHERE users.id='.$user_id.' LIMIT 1';
我是否需要添加到users.id =“”为什么它适用于一个用户而不适用于其他用户
答案 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重写它会好得多。但它应该很复杂,也许需要一些时间。