zend-framework - 如何在 where 子句中使用 Zend_Db_Table->update() 绑定(bind)变量

标签 zend-framework zend-db-table

如果我想使用 Zend_Db_Table->update() 方法用数据更新我的表,我无论如何都找不到在“where”子句中使用绑定(bind)变量。

方法签名是:

int  update($data, array|string $where)

通常你会像这样调用该方法:

$table = new Bugs();

$data = array(
    'updated_on'      => '2007-03-23',
    'bug_status'      => 'FIXED'
);

$where = $table->getAdapter()->quoteInto('bug_id = ?', 1234);

$table->update($data, $where);

quoteInto 只是转义变量,而不是绑定(bind)它。

需要有一种方法来使用绑定(bind)变量,否则 DBMS 将无法有效地缓存此查询。

我是否遗漏了什么,或者这是 Zend 的疏忽?

最佳答案

您只是更新数据,RDBMS(我假设是 MySQL)不会缓存 UPDATE 查询。如果您仍然想使用绑定(bind)变量(安全性?性能?),则必须使用准备好的语句:

$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$stmt = $db->prepare("UPDATE table SET key = :key, value = :value");

foreach ($data as $key=>$value) {
    $stmt->bindParam('key', $key);
    $stmt->bindParam('value', $value);
    $stmt->execute();
}

但是除非您批量有数百万个 UPDATE 查询,否则我认为您不应该为此烦恼。只需使用 $table->update($data, $where);

关于zend-framework - 如何在 where 子句中使用 Zend_Db_Table->update() 绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604388/

相关文章:

php - MySQL 文本数据被某些符号截断

php - 在加入 zend 框架时应用 AND 条件

zend-framework - 从一个 PHP 框架迁移到另一个

php - 如何使用 stackoverflow 等 Google gmail 帐户对用户进行身份验证

php - 使用 Ajax 和 Jquery 设置 Iframe 目标?

php - 如何在 Zend_Form 中使用来自 Zend_Db_Table 的数据

php - Zend Framework 快速入门模型构造函数

php - Zend 框架中的建模

mysql - 扩展Zend_Db_Table_Abstract创建联接时,会崩溃MySQL

php - 什么时候应该使用 Doctrine ORM,什么时候应该使用 zend-db-table?