dongzhang7157 2014-12-03 13:19
浏览 14
已采纳

在Zend中查询“ON DUPLICATE KEY UPDATE”

I have a question about prepare() method. I have a query like this one :

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));                
}

With that synthax, I have to duplicate $value in my execute, there is any other issue to do this without duplicate ?

Thanks

  • 写回答

1条回答 默认 最新

  • dpf7891 2014-12-03 13:21
    关注

    You could use:

    ON DUPLICATE KEY UPDATE value = VALUES(value)
    

    See also the docs for MySQL: http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html, specifically:

    You can use the VALUES(col_name) function in the UPDATE clause to refer to column values from the INSERT portion of the INSERT ... ON DUPLICATE KEY UPDATE statement. In other words, VALUES(col_name) in the ON DUPLICATE KEY UPDATE clause refers to the value of col_name that would be inserted, had no duplicate-key conflict occurred. This function is especially useful in multiple-row inserts. The VALUES() function is meaningful only in INSERT ... UPDATE statements and returns NULL otherwise. Example:

    INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
    ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?