Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用php脚本进行重复密钥更新_Php_Mysql - Fatal编程技术网

无法使用php脚本进行重复密钥更新

无法使用php脚本进行重复密钥更新,php,mysql,Php,Mysql,好了,我现在开始发疯了。太多的尝试和错误使我相当暴躁 我正在尝试使用循环进行插入和更新(如果存在)。为了简化我的问题,我从这个例子中排除了循环代码 以下是我的PHP脚本中的查询: function insertrating($ratingid, $rating){ $link = resdb::connect(); $r = mysqli_query($link, "INSERT INTO propertyrating (id,name)"

好了,我现在开始发疯了。太多的尝试和错误使我相当暴躁

我正在尝试使用循环进行插入和更新(如果存在)。为了简化我的问题,我从这个例子中排除了循环代码

以下是我的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 名称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)返回插入中给定的值,但您没有提供用于描述的值。省略它将导致描述无法更新

Put
echo mysqli_错误($link)
在mysqli\u query
之后立即获取发生的确切错误(如果有)


但是,请确保在调试会话之后删除了这一行。

用空格替换
\n
,并向我们显示由脚本生成的简单sql查询(没有任何php代码)。那么
echo mysqli\u error($link)呢就在mysqli\u query之后
?您遇到了什么错误?这个问题在我看来很好。。。您是否碰巧在(
名称
)上有一个
唯一的
?还有一些事情正在发生,因为这里的查询看起来很好……是的,这个错误在这里会很有用。接下来的各位,什么是捕获此查询错误的正确方法?