いいえ、今すぐにスピンアウトしています。あまりにも多くの試行錯誤が私をむしばらせてくれました。使用できません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));
'\ n'をスペースで置き換え、スクリプトによって生成された** plain SQLクエリ**(PHPコードなし)を表示します。 – zerkms
'mysqli_query'の直後に' echo mysqli_error($ link); 'はありますか? – zerkms
あなたは何を得ているのですか?その質問は私にはうまく見えます...万が一あなたは(名前に)「ユニーク」を持っていますか?クエリがうまくいくように見えるので、何か他のことが起こっています... – ircmaxell