2011-02-11 3 views
0

いいえ、今すぐにスピンアウトしています。あまりにも多くの試行錯誤が私をむしばらせてくれました。使用できませんPHPスクリプトで重複キー更新を受け取りました

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型 名VARCHAR(100) 説明テキスト

私はこれで説明を追加する必要はありませんステージ。したがって、その列のパラメータはありません

私はphpMyAdminとMySQLコンソールで全く同じクエリを生成していますが、両方とも動作します。したがって、私の構文と何かを推測しています。

また、私がON DUPLICATE KEY UPDATE関数とパラメータを取り除くと、それは機能します。ただし、明らかに重複行は更新されません。

私が間違っている場所を質問してください。ありがとう。

EDIT:要求されたSQL

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

REQUESTED UNIQUE * PK

Table is as follows: 

固有のID INTとPRIMARY KEY 名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と名前の間には空白がありません(UPDATEnameと読み替えてください)。私は文字スペースを追加しましたが、今はすべてがグレービーです。 mysqli_error($link)

ないzerkmsに答えを与える方法がわからに私を取得するための

多くのおかげではなく、Uすべては最初、正しい方向に私を導きました。

コードは今のように立って:

$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'をスペースで置き換え、スクリプトによって生成された** plain SQLクエリ**(PHPコードなし)を表示します。 – zerkms

+2

'mysqli_query'の直後に' echo mysqli_error($ link); 'はありますか? – zerkms

+0

あなたは何を得ているのですか?その質問は私にはうまく見えます...万が一あなたは(名前に)「ユニーク」を持っていますか?クエリがうまくいくように見えるので、何か他のことが起こっています... – ircmaxell

答えて

1

正確なエラーを取得するには、右mysqli_queryecho mysqli_error($link);を置くには、(もしあれば)

が起こっしかし、あなたは、このデバッグセッションの後に、この行を削除したことを確認してください。

1

あなたが取得しているエラーを見ずに答えるのは難しいが、私はこの句を含めるべきではないと思う:

description = VALUES (description) 

VALUES(名前)を返しますINSERTで指定された値。説明のために指定しなかった場合。それを残すと、説明が更新されなくなります。

+0

+1。私はちょうど同じ答えを書いていた – Ben

関連する問題