在Zend中查询“ON DUPLICATE KEY UPDATE”

时间:2014-12-03 13:19:57

标签: php mysql sql zend-framework zend-db

我对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,还有其他问题没有重复吗?

由于

1 个答案:

答案 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);