0

I have the following prepared statement. All is good...

$stmt=$conn->prepare('UPDATE t1 SET c1=? WHERE c2=? AND c3!=?'); $stmt->execute(array(1,2,3)); 

But now I wish to use the same prepared statement, but include NULL values in the WHERE clause.

$stmt->execute(array(1,NULL,NULL)); 

Will this resolve to UPDATE t1 SET c1=1 WHERE c2=NULL AND c3!=NULL? Isn't the proper query UPDATE t1 SET c1=1 WHERE c2 IS NULL AND c3 IS NOT NULL? How can I have a single prepared statement which allows both NULL and not NULL values in the WHERE clause?

3
  • possible duplicate of Execute PDO with an array containing null values Commented Jun 25, 2014 at 19:30
  • @RahilWazir Referenced "possible duplicate" is for inserting NULL. INSERTs or SETs do not cause a problem, only the WHERE clause. Commented Jun 25, 2014 at 19:33
  • 1
    To the individual who downvoted. Please give reason why. Commented Jun 25, 2014 at 19:39

1 Answer 1

1

You asked if a SQL query containing

 WHERE col = ? 

will automatically be converted to

 WHERE col IS NULL 

by binding a NULL value to the parameter.

The answer is no. If a column has a NULL value, it can never compare equal to anything.

You need a different prepared query for that.

Sign up to request clarification or add additional context in comments.

3 Comments

Thanks Ollie. Do I understand you in that I cannot use the same prepared statement when having NULL and non-NULL in the WHERE clause?
Correct. If you think NULL might come into play, you need to handle that in your query, which is why nullable columns shouldn't be overused.
Thanks again Ollie. Well, that is a bummer!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.