如何使用Zend_Db引用列名?

时间:2012-01-28 09:25:10

标签: php mysql zend-framework zend-db-table

我在MySQL表中使用key作为列名。

由于这是保留的,因此需要正确转义才能在查询中使用:

… WHERE `key` = 'test'

手动这没问题,但是我正在使用Zend Framework并希望让它正确处理转义,如下所示:

$table = new Application_Model_ATable();
$table->fetchRow ( $table->select()->where('key = ?','test') );

所以问题是:

如何使用Zend_Db_Table引用/转义列名?

3 个答案:

答案 0 :(得分:4)

avoiding MySQL injections with the Zend_Db class

这家伙实际上在这里解释了,但生病只是快速推出报价......

  

该表达式的任何其他部分需要引用或分隔   是你的责任。例如,如果插入任何PHP变量   进入表达,安全是你的责任。如果你有专栏   作为SQL关键字的名称,您需要自己分隔它们   quoteIdentifier()。例如:

$select->where($db->quoteIdentifier('order').'=?', $myVariable)

希望这会有所帮助!!

答案 1 :(得分:1)

尝试类似:

$table = new Application_Model_ATable();
$where = $table->getAdapter()->quoteInto('key = ?', 'test');
$table->fetchRow ( $where );
  

* - 摘自Zend_Db_Table引用 - *
注意SQL表达式中的值和标识符不会为您引用。如果你有   需要引用的值或标识符,由您负责   这样做。使用quote(),quoteInto()和quoteIdentifier()   数据库适配器的方法。

答案 2 :(得分:1)

当使用大写字母时,必须引用列名。当您计划将来切换数据库适配器时,使用$ db-> quoteIdentifier($ columnName)引用这些名称是很有用的。