2014-12-03 116 views
0

我有一个关于prepare()方法的问题。我有这样一个查询:Zend中的“ON DUPLICATE KEY UPDATE”查询

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,我在重复$值我执行,没有任何其他问题做到不重复?

感谢

回答

1

你可以使用:

ON DUPLICATE KEY UPDATE value = VALUES(value) 

又见文档为MySQL:http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html,具体如下:

您可以使用VALUES(COL_NAME)函数UPDATE子句中到 指的是INSERT ... ON DUPLICATE KEY UPDATE语句的INSERT部分中的列值。换句话说, 中的VALUES(col_name),ON DUPLICATE KEY UPDATE子句指的是在没有发生重复键冲突时将插入的col_name 的值。这个 函数在多行插入中特别有用。 VALUES() 函数仅在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); 
+0

正是我在找什么!谢谢 ;-) – Snabow 2014-12-03 13:38:57

相关问题