好的,我现在开始分手了。太多的反复试验使我变得脾气暴躁。
如果EXISTS使用循环,我试图进行INSERT和UPDATE。我已从此示例中排除了循环代码以简化我的问题。
以下是我的PHP脚本中的查询:
function insertrating($ratingid, $rating){
$link = resdb::connect();
$r = mysqli_query($link, "INSERT INTO propertyrating (id,name)"
."VALUES (\'$ratingid\',\'$rating\')\n"
."ON DUPLICATE KEY UPDATE\n"
."name = VALUES (name),\n"
."description = VALUES (description)\n"
. "");
if($r > 0){
return true;
}
}
$mydbclass = new $dbclass();
$mydbclass->insertrating('3','3 Star');
表格如下: id int name varchar(100) 说明文字
我不想在这个阶段添加说明。因此没有该列的参数
我在phpMyAdmin和MySQL控制台中生成了完全相同的查询,两者都有效。因此,我猜测它与我的语法有关。
此外,如果我摆脱了ON DUPLICATE KEY UPDATE
功能和参数,它的工作原理。但是,显然不会更新重复的行。
请询问或纠正我错在哪里。感谢。
编辑:请求SQL
INSERT INTO
propertyrating
(
id,
name
)
VALUES
(
'3',
'3 Star'
)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
description = VALUES (description)
AS REQUESTED UNIQUE * PK
Table is as follows:
id int UNIQUE AND PRIMARY KEY name varchar(100) 说明文字
OK GUYS ERROR RETURNED:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATEname = name,description = description
你可以看到UPDATE和name之间没有空格(它读取,UPDATEname)我添加了一个字符空间,现在一切都是肉汁。
非常感谢您访问mysqli_error($link)
不确定如何回答zerkms,但是你们首先让我朝着正确的方向前进。
代码现在代表:
$r = mysqli_query($link, "INSERT INTO propertyrating (id,name)"
."VALUES (\'$ratingid\',\'$rating\')\n"
."ON DUPLICATE KEY UPDATE\n"
."name = VALUES (name),\n"
."description = VALUES (description)\n"
. "") or die("Error: ".mysqli_error($link));
答案 0 :(得分:1)
如果没有看到您收到的错误,很难回答,但我认为您不应该包含此条款:
description = VALUES (description)
VALUES(name)返回INSERT中给出的值,并且您没有提供一个用于描述的值。离开它将导致描述不被更新。
答案 1 :(得分:1)
将echo mysqli_error($link);
放在mysqli_query
之后,以便发现确切的错误(如果有的话)
但请确保在此调试会话后删除了此行。