INSERT ... ON DUPLICATE KEY或UPDATE ... SET

时间:2016-05-25 19:39:58

标签: php mysql

我有一个INSERT .. ON DUPLICATE KEY,它不会更新,而是插入一个新行。我有一个2个唯一的键,但它只是插入新的行。 我已尝试在多行上使用唯一键来查看是否存在问题,但仍然遇到同样的问题。

所以我想知道会使用UPDATE表SET ...更合适,还是应该坚持使用INSERT .. ON DUPLICATE。

我有一个产品表,我希望我的管理员能够随时更改/更新。目前我有一个INSERT .. ON DUPLICATE但它给了我无穷无尽的问题。

我在主键上都有一个唯一的键(我知道它不需要,仅用于测试目的)和餐馆名称,因为逻辑上我认为如果仅在餐馆名称上有一个唯一的键不起作用。也许通过使餐馆ID和餐馆名称成为唯一键,该功能将更新行而不插入新的。但仍然没有用,这是我最后的手段,因为我无法弄清楚这个问题。

更新

只有在我更改餐馆名称时才会插入新行,如果我更改了表格更新的其他内容。

  if (isset($_POST['Save-dets'])) {
        $r_id = mysqli_real_escape_string($dbc, $_POST['Resturant_ID']);
        $r_name = mysqli_real_escape_string($dbc, $_POST['rest_name']);
        $r_desc = mysqli_real_escape_string($dbc, $_POST['Desc']);

  $insert_rest = "INSERT INTO Rest_Details
  ( Resturant_ID
  , Resturant_name
  , Resturant_des) 
  VALUES
  ( ?
  , ?
  , ?
  ) 
 ON DUPLICATE KEY 
 UPDATE Resturant_ID = ?
  , Resturant_name               = ?
  , Resturant_des        = ?";

         $run_query = $dbc->prepare($insert_rest);
       $run_query->bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );


        if (!$run_query->execute($run_query))


        if ($execute) {
            echo "<script> alert('Addrrss Saved')</script>";

    } else {
        echo mysqli_error($dbc);
    }
    }

CREATE TABLE `Rest_Details` (
`Resturant_ID` bigint(255) NOT NULL AUTO_INCREMENT,
`Resturant_name` varchar(100) NOT NULL,
`Resturant_des` varchar(200) NOT NULL,
 PRIMARY KEY (`Resturant_ID`),
 UNIQUE KEY `Resturant_ID` (`Resturant_ID`,`Resturant_name`),
 ) ENGINE=InnoDB AUTO_INCREMENT=243 DEFAULT CHARSET=utf8

您对此事的意见非常有帮助。

1 个答案:

答案 0 :(得分:0)

请在

查看您的使用情况
$run_query->bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );

您正在将面向对象的样式参数与功能样式参数混合使用 - 请参阅http://php.net/manual/en/mysqli-stmt.bind-param.php

基于at文档,它可能是

$run_query->bind_param('ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );

mysqli_stmt_bind_param($c, 'ssssss', $r_id, $r_name, $r_desc,$r_id, $r_name, $r_desc );