我有一个关于prepare((方法的问题。我有一个这样的查询:
public function updateParam($id, $param, $value){
// Change BDD
$db = Zend_Registry::get("db_foo");
// Prepare query
$insert = $db->prepare(
'INSERT INTO TP_bar (id, type, value)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
value = ?');
// Execute query
$insert->execute(array($id, $param, $value, $value));
}
使用该合成器,我必须在执行中复制$value,还有其他问题可以在不重复的情况下执行此操作吗?
谢谢
您可以使用:
ON DUPLICATE KEY UPDATE value = VALUES(value)
另请参阅MySQL的文档:http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html,特别是:
您可以使用 UPDATE 子句中的 VALUES(col_name( 函数来 请参阅插入部分的列值...上 重复密钥更新语句。换句话说,值(col_name( ON DUPLICATE KEY UPDATE 子句是指 col_name 的值 如果没有发生重复键冲突,则将插入该内容。这 函数在多行插入中特别有用。值(( 函数仅在插入中有意义...更新语句和 否则返回 NULL。例:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);