无法使用php脚本进行重复密钥更新
好了,我现在开始发疯了。太多的尝试和错误使我相当暴躁 我正在尝试使用循环进行插入和更新(如果存在)。为了简化我的问题,我从这个例子中排除了循环代码 以下是我的PHP脚本中的查询:无法使用php脚本进行重复密钥更新,php,mysql,Php,Mysql,好了,我现在开始发疯了。太多的尝试和错误使我相当暴躁 我正在尝试使用循环进行插入和更新(如果存在)。为了简化我的问题,我从这个例子中排除了循环代码 以下是我的PHP脚本中的查询: function insertrating($ratingid, $rating){ $link = resdb::connect(); $r = mysqli_query($link, "INSERT INTO propertyrating (id,name)"
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
名称varchar(100)
描述文本
我不想在此阶段添加说明。因此,该列没有参数
我在phpMyAdmin和MySQL控制台中生成了完全相同的查询,这两种查询都可以工作。因此,我猜这与我的语法有关
另外,如果我去掉了重复键更新上的函数和参数,它就会工作。但是,显然不会更新重复的行
请询问或纠正我的错误。谢谢
编辑:请求的SQL
INSERT INTO
propertyrating
(
id,
name
)
VALUES
(
'3',
'3 Star'
)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
description = VALUES (description)
按要求唯一*PK
Table is as follows:
id int唯一主键
名称varchar(100)
描述文本
确定返回的错误:
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\u error($link)
我不知道如何回答虫族,但你们首先都把我引向了正确的方向
守则现为:
$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));
如果没有看到您所遇到的错误,很难回答,但我认为您不应该包括以下条款:
description = VALUES (description)
VALUES(name)返回插入中给定的值,但您没有提供用于描述的值。省略它将导致描述无法更新 Putecho mysqli_错误($link)
在mysqli\u query
之后立即获取发生的确切错误(如果有)
但是,请确保在调试会话之后删除了这一行。用空格替换
\n
,并向我们显示由脚本生成的简单sql查询(没有任何php代码)。那么echo mysqli\u error($link)呢代码>就在mysqli\u query之后
?您遇到了什么错误?这个问题在我看来很好。。。您是否碰巧在(名称
)上有一个唯一的
?还有一些事情正在发生,因为这里的查询看起来很好……是的,这个错误在这里会很有用。接下来的各位,什么是捕获此查询错误的正确方法?