我想ON DUPLICATE KEY UPDATE
在Zend Framework 1.5中使用,这可能吗?
例
INSERT INTO sometable (...) VALUES (...) ON DUPLICATE KEY UPDATE ...
Bill Karwin.. 54
我曾为Zend工作,并专门研究Zend_Db.
不,ON DUPLICATE KEY UPDATE
语法没有API支持.对于这种情况,您必须query()
自己使用并形成完整的SQL语句.
我不建议将值插入到SQL中,如harvejs所示.使用查询参数.
编辑:您可以通过使用VALUES()
表达式避免重复参数.
$sql = "INSERT INTO sometable (id, col2, col3) VALUES (:id, :col2, :col3) ON DUPLICATE KEY UPDATE col2 = VALUES(col2), col3 = VALUES(col3)"; $values = array("id"=>1, "col2"=>327, "col3"=>"active");
小智.. 6
作为侧边栏,您可以使用以下方法简化ON DUPLICATE KEY UPDATE
子句并减少脚本需要执行的处理量VALUES()
:
$sql = 'INSERT INTO ... ON DUPLICATE KEY UPDATE id = VALUES(id), col2 = VALUES(col2), col3 = VALUES(col3)';
有关更多信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html.
我曾为Zend工作,并专门研究Zend_Db.
不,ON DUPLICATE KEY UPDATE
语法没有API支持.对于这种情况,您必须query()
自己使用并形成完整的SQL语句.
我不建议将值插入到SQL中,如harvejs所示.使用查询参数.
编辑:您可以通过使用VALUES()
表达式避免重复参数.
$sql = "INSERT INTO sometable (id, col2, col3) VALUES (:id, :col2, :col3) ON DUPLICATE KEY UPDATE col2 = VALUES(col2), col3 = VALUES(col3)"; $values = array("id"=>1, "col2"=>327, "col3"=>"active");
作为侧边栏,您可以使用以下方法简化ON DUPLICATE KEY UPDATE
子句并减少脚本需要执行的处理量VALUES()
:
$sql = 'INSERT INTO ... ON DUPLICATE KEY UPDATE id = VALUES(id), col2 = VALUES(col2), col3 = VALUES(col3)';
有关更多信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html.
@Bill Karwin:很棒的解决方案!但是如果使用命名占位符(":id",":col1",...)而不是问题符号会更好.比你不需要通过array_marge复制值.另外,如果使用"INSERT"而不是"VALUES"的"SET"语法,则代码变得更简单,可以为任何字段集自动生成.
$sql = 'INSERT INTO sometable SET id = :id, col2 = :col2, col3 = :col3 ON DUPLICATE KEY UPDATE id = :id, col2 = :col2, col3 = :col3';