我对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));
}
使用那个synthax,我必须在执行中复制$ value,还有其他问题没有重复吗?
由于
答案 0 :(得分:1)
您可以使用:
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)函数 引用INSERT ... ON的INSERT部分的列值 DUPLICATE KEY UPDATE语句。换句话说,VALUES(col_name)in ON DUPLICATE KEY UPDATE子句引用col_name的值 将插入,没有发生重复键冲突。这个 函数在多行插入中特别有用。价值() 函数只在INSERT ... UPDATE语句中有意义 否则返回NULL。示例:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);