17

MySQL クエリを実行する PHP スクリプトがあります。

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

これが私がやろうとしていることです: Col1 は主キーです。重複がある場合は、col2 の挿入値が null かどうかを確認します。そうでない場合は、値で更新されます。それ以外の場合、値は同じままです。

この挿入は失敗します。sqlyog で手動で実行しようとすると (変数の代わりに実際の値を挿入)、次のエラーが発生します: エラー コード: 1064

SQL 構文にエラーがあります。「IS NOT NULL.....」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

IS NOT NULL 比較演算子 ( 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 サーバーで実行されています。

4

1 に答える 1

26

構文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)";
于 2012-04-27T16:22:04.550 に答える