我到处找都找不到答案
我有一个关于重复更新的插入,我需要指定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语句中使用转义字符串。
看起来您正试图创建一个查询来处理create
和update
。因此,如果您知道要更新的记录的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");
注意:替代方法将删除旧行并创建新行检测到重复密钥时的一个。这是一个有用的选择不必指定要更新的所有列,但应确保它不会首先引起任何问题。