我到处寻找,找不到答案
我有重复更新的插入,我需要指定Rest_ID =' $ rest_ID',但我收到以下错误
您的SQL语法有错误;查看与MySQL服务器对应的手册 正确使用语法的版本' WHERE Resturant_ID =' 1''在第41行。
最好的方法是使用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'";
答案 0 :(得分:1)
我需要指定Rest_ID ='$ rest_ID',
的位置
你没有。
为ON DUPLICATE KEY
查询指定WHERE子句绝对没有意义。
您必须在INSERT子句中提供主键变量。
此外,你不应该使用带有预准备语句的转义字符串。
答案 1 :(得分:0)
您似乎正在尝试创建一个查询来处理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");
注意:替代方法将删除旧行并创建新行 一个检测到欺骗密钥时。这是一个有用的替代方案 不必指定要更新的所有列,但您应该确保 它不会先造成任何问题。