我在MySQL表中使用key
作为列名。
由于这是保留的,因此需要正确转义才能在查询中使用:
… WHERE `key` = 'test'
手动这没问题,但是我正在使用Zend Framework并希望让它正确处理转义,如下所示:
$table = new Application_Model_ATable();
$table->fetchRow ( $table->select()->where('key = ?','test') );
所以问题是:
如何使用Zend_Db_Table引用/转义列名?
答案 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)引用这些名称是很有用的。