2012-04-27 11 views
9

私はMySQLクエリを実行するPHPスクリプトを持っています。ここでIFFTをMySQLのON DUPLICATE KEY UPDATEで使用する

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2= IF(IS NOT NULL '$val1', 'test', 'col2)"; 

は私がしようとしているものです: のCol1は主キーです。重複がある場合、col2の挿入値がNULLかどうかを確認します。そうでない場合は、値で更新されます。そうでない場合、値は変わりません。

この挿入は失敗します。 NULL比較がされていないため、私はMySQLのリファレンスマニュアルをチェックした1064

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 'IS NOT NULL.....'

: エラーコード:私はSQLyogの中に手動でそれを実行しようとすると(変数の代わりに実際の値を挿入する)、私は次のエラーを取得します演算子(http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-not-null)、INSERT ... ON DUPLICATE KEY UPDATE構文(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)に対しても、正しく両方を使用していると信じていますが、明らかにそうではありません。

私は間違っていますか?

参考までに、私はMySQL 5を使用しており、スクリプトはRHEL5サーバー上で実行されています。

答えて

12

構文IS NOT NULL columnが間違っています。正解:column IS NOT NULL。この'test'が何であるか分かりません。列を更新するか、そのままにしておきたいと言います。以下のように書くこともできる

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2 = IF('$val2' IS NOT NULL, '$val2', col2)"; 

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE 
      col2 = COALESCE(VALUES(col2), col2)"; 
+0

あなたの助けをありがとうございました!また、「テスト」の値は見落としであった。これはテスト時にcol2に使用していた値で、削除するのを忘れてしまった。 –

関連する問題