I have a PHP script which runs a MySQL query.
$query = "INSERT INTO table (col1, col2)
VALUES('$val1', '$val2')
ON DUPLICATE KEY UPDATE col2= IF(IS NOT NULL '$val1', 'test', 'col2)";
Here is what I am trying to do:
Col1 is the primary key. If there is a duplicate, it checks to see if the insert value for col2 is null. If not, it will update with the value, otherwise the value will stay the same.
This insert fails. When I try to run it manually in sqlyog (inserting actual values in place of variables), I get the following error:
Error Code: 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…..’
I have checked the MySQL reference manual for the IS NOT NULL comparison operator (http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-not-null), and also for the INSERT … ON DUPLICATE KEY UPDATE Syntax (http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html) and believe I am using both correctly, but obviously that is not the case.
What am I doing wrong?
For reference, I am using MySQL 5 and the script is running on a RHEL5 server.
The syntax
IS NOT NULL columnis wrong. Correct:column IS NOT NULL. I’m not sure what this'test'is about. You say that you want to either update the column or keep it as it is.which can also be written as: