PHP-在INSERT中使用WHERE处理重复更新问题


PHP - Using WHERE in INSERT ON DUPLICATE UPDATE issue

我到处找都找不到答案

我有一个关于重复更新的插入,我需要指定Rest_ID='$Rest_ID'的位置,但我收到以下错误

您的SQL语法有错误;查看与MySQL服务器对应的手册第41行"WHERE Resturant_ID='1'"附近要使用的正确语法的版本。

最好的方法是使用IF而不是WHERE?

这就是我目前正在使用的

        if (isset($_POST['Save-dets'])) {
        $rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']);
        $r_name = mysqli_real_escape_string($dbc, $_POST['rest_name']);
        $r_desc = mysqli_real_escape_string($dbc, $_POST['Desc']);
        $r_addl1 = mysqli_real_escape_string($dbc, $_POST['address1']);
        $r_addl2 = mysqli_real_escape_string($dbc, $_POST['address2']);
        $r_city = mysqli_real_escape_string($dbc, $_POST['city']);
        $r_pcode = mysqli_real_escape_string($dbc, $_POST['pcode']);
        $insert_rest = "INSERT INTO Rest_Details
  ( Resturant_name
  , Resturant_des
  , Res_Address_Line_1
  , Res_Address_Line_2
  , City_name
  , Resturant_Postcode
  ) 
  VALUES
  ( ?
  , ?
  , ?
  , ?
  , ?
  , ?
  ) 
  ON DUPLICATE KEY 
  UPDATE Resturant_name               = VALUES(Resturant_name)
  , Resturant_des        = VALUES(Resturant_des)
  , Res_Address_Line_1              = VALUES(Res_Address_Line_1)
  , Res_Address_Line_2 = VALUES(Res_Address_Line_2)
  , City_name = VALUES(City_name)
  , Resturant_Postcode              = VALUES(Resturant_Postcode)
   WHERE Resturant_ID ='$rest_id'";

我需要指定Rest_ID='$Rest_ID'的位置,

你没有。

ON DUPLICATE KEY查询指定WHERE子句毫无意义。

您必须在INSERT子句中提供主键变量。

此外,您不应该在prepared语句中使用转义字符串。

看起来您正试图创建一个查询来处理createupdate。因此,如果您知道要更新的记录的ID,我就不会对使用UPDATE语句做出明显的评论。

本质上,您只需要将Restaurant_ID列添加到INSERT列中。如果您没有创建操作之类的ID,请使用NULL

例如:

# Create a new entry in foo
INSERT INTO foo(id, title) VALUES(NULL, "new title") ON DUPLICATE KEY UPDATE title=VALUES(title)
# Update an entry in foo
INSERT INTO foo(id, title) VALUES(10, "new title") ON DUPLICATE KEY UPDATE title=VALUES(title)
# Alternative method
REPLACE INTO foo(id, title) VALUES(10, "new title");

注意:替代方法将删除旧行并创建新行检测到重复密钥时的一个。这是一个有用的选择不必指定要更新的所有列,但应确保它不会首先引起任何问题。