【问题标题】:Unknown column 'c63rd321' in 'where clause'“where 子句”中的未知列“c63rd321”
【发布时间】:2013-07-18 16:20:18
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否对$database$user_id 进行了任何清理?
  • 没有通过调用 $_SESSION[''] 设置变量

标签: php mysql


【解决方案1】:

看起来 $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)

【讨论】:

  • 我试试看。谢谢
  • 用户ID确实是一个字符串,并且有几个破折号“-”字符,
【解决方案2】:

请替换:

$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 来自 $_SESSION['user']
  • @Dan - 我无法理解你的问题。
【解决方案3】:

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

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

【讨论】:

  • 我刚去了数据库,确实问题是其中一个用户的 id 是整数,所有其他用户都有一个字符串有 id。
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 2021-09-19
  • 2020-06-28
  • 2021-07-02
  • 2019-08-14
  • 2016-10-04
  • 2020-07-21
相关资源
最近更新 更多