【问题标题】:Zend DB where clause errorZend DB where 子句错误
【发布时间】:2012-03-14 15:49:17
【问题描述】:

编辑:

$query->where('`value` = ?', $number); 似乎可以完成这项工作。我仍然不知道为什么它在正常条件下不起作用,但它是一种解决方法.. 仍在寻找正确的答案!


我正在尝试使用简单的方式查询数据库:

$number = 4;
$query = $this->select();
$query->where('value = ?', $number);
$row = $this->fetchRow($query);

但由于某种原因,我经常收到此错误:

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,在 'value = 4) 附近使用正确的语法 在第 1 行限制 1'

当我进行组装以查看查询字符串时:

SELECT `mighty_table`.* FROM `mighty_table` WHERE (value = 4)

我的列名没有转义..

Zend DB 应该这样做吗? :|这很奇怪,因为我在其他项目中使用相同的方法并且它总是有效..

【问题讨论】:

  • Syntax error or access violation 检查您的连接字符串是否正确。这可能是由错误的用户名/密码引起的。
  • @vascowhite 让我的连接正常工作,这不是问题所在。 :\
  • 试试$query->where("value = '?', $number);。我看不出其他任何可能有问题的地方。
  • 你的数据库中有一个mighty_table.value 列吗?
  • 如果您直接在数据库中运行查询,它是否有效?

标签: mysql zend-framework zend-db


【解决方案1】:

From zend manual

注意:SQL 表达式中的值和标识符不加引号 为你。如果您有需要引用的值或标识符,您 负责执行此操作。使用 quote()、quoteInto() 和 数据库适配器的 quoteIdentifier() 方法。

例如,您可以使用 quoteInto :

$number = 4;
$query = $this->select();
$where = $this->getAdapter()->quoteInto('value = ?', $number);
$query->where($where);
$row = $this->fetchRow($query);

【讨论】:

  • 这个可能需要->quoteIdentifier(),我很确定VALUE是Mysql中的一个关键字,我知道VALUES是。
  • 这实际上是我的代码全是错误的原因。感谢你的回答! :)
【解决方案2】:

“value”确实是 MySQL 中的保留字。因此,您需要使用反引号对其进行转义。

我希望这会起作用:

$fieldName = $this->getAdapter()->quoteIdentifier('value');
$query->where($fieldName = ?", $number);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多