dongzhang7157
dongzhang7157
2014-12-03 13:19

在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 dpf7891 7年前

    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);
    
    点赞 评论 复制链接分享

相关推荐