2011-02-11 74 views
0

好吧,我现在开始旋转。过多的尝试和错误使我变得脾气暴躁。无法使用重复密钥更新与PHP脚本

我想做一个插入和更新如果存在使用循环。我已经排除了这个例子中的循环代码来简化我的问题。

这里是我的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控制台中生成了完全相同的查询,两者都起作用。因此,我猜测它与我的语法有关。

此外,如果我摆脱ON DUPLICATE KEY UPDATE功能和参数它的工作。但是,显然不会更新重复的行。

请问或更正我错的地方。谢谢。

编辑:请求的SQL

INSERT INTO 
propertyrating 
(
    id, 
    name 
) 
VALUES 
(
    '3', 
    '3 Star' 
) 
ON DUPLICATE KEY UPDATE 
name = VALUES (name), 
description = VALUES (description) 

的要求UNIQUE * PK

Table is as follows: 

ID int唯一和主键 名VARCHAR(100) 说明文字

OK GUYS返回错误:

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

用空格替换`\ n`并向我们显示**脚本生成的纯sql查询**(没有任何php代码)。 – zerkms 2011-02-11 02:26:32

+2

``mysqli_error($ link)``mysqli_query`后面呢? – zerkms 2011-02-11 02:35:30

回答

1

echo mysqli_error($link);mysqli_query后立即得到确切的错误发生(如果有的话)

但要确保你已经删除了此调试会话后,这条线。

1

很难回答没有看到你所得到的错误,但我认为你不应该包括这一条款:

description = VALUES (description) 

VALUES(name)返回INSERT中给出的值,并且您没有提供用于说明的值。离开它将导致描述不被更新。