【问题标题】:Why is MySQL adding an apostrophe?为什么 MySQL 添加撇号?
【发布时间】:2012-07-13 23:11:19
【问题描述】:

这是我正在构建的 where 子句:

 $where = "requesterid='".$memberid."' AND recieverid='".$tomemberid."' OR requesterid='".$tomemberid."' AND recieverid='".$memberid."'";

现在$memberid$tomemberid 都是整数。这是我执行时的错误:

'where 子句'中的未知列'requesterid='6''

SQL:

SELECT * FROM (`friendships`) WHERE `requesterid='6'` AND
recieverid='5' OR requesterid='5' AND recieverid='6'

为什么 MySQL 在数字 6 后添加撇号?我打印出$memberid 并且在它之后/之前没有显示任何撇号或其他任何内容。我做错了什么?

【问题讨论】:

  • 对于它的价值,我认为它没有添加撇号 - 它打印出来的错误消息被包裹在撇号中,所以最外面的一对来自错误消息,而里面的一对是那些缠绕在 6 周围的。
  • 用括号分割你的 AND/OR 语句将改进/纠正逻辑并阐明你的意图。您在下面的 cmets 中提到变量来自查询参数……确保对它们进行清理!

标签: php mysql codeigniter activerecord where


【解决方案1】:

如果是数值,可以省略撇号

$where = "(requesterid=$memberid AND recieverid=$tomemberid) OR (requesterid=$tomemberid AND recieverid=$memberid)";

【讨论】:

  • 好吧,现在错误更清楚了,哈哈……它仍然在前 6 个之后添加撇号……
  • 你确定它是一个整数吗? :)
  • 它来自一个 url 参数,$memberid
  • 它给了我这个错误:'where 子句'中的未知列'$memberid'
  • 你能把你正在生成的 SQL 回显出来吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 2015-02-03
相关资源
最近更新 更多