2011-02-11 75 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中給出的值,並且您沒有提供用於說明的值。離開它將導致描述不被更新。