I have a table which has some nullable fields and when the user enters nothing into the HTML form field, I want to insert NULL into that field, not an empty string (this is important as some of my SELECTs on these tables later use conditions such as WHERE x IS NOT NULL).
However, this version of bindParam code inserts an empty string into the nullable field instead of NULL.
$stmt2->bindParam(':title', $title, PDO::PARAM_STR);
I've been reading quite a bit and figured out that this is the answer to insert null into the field instead:
$stmt2->bindParam(':title', $title, PDO::PARAM_NULL);
But this means I need to pre-check all parameters that are being passed to nullable fields to determine if they are empty, and if so pass the PDO::PARAM_NULL
instead of PDO::PARAM_STR
. I can of course do this, but was hoping there might be a setting which would just tell PDO if it encounters an empty string, insert null instead.
I stumbled across this
$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING);
But it has no effect and with further research I'm thinking this only affects record on the way out, not on the way in.
Any options other than pre-checking the variables?
If you want null, just insert null
instead of empty string.
$stmt2->bindParam(':title', $title === '' ? null : $title, PDO::PARAM_STR);
Besides xdazz's more appropriate answer, you can often solve something like this in SQL: Just rephrase the query INSERT INTO ... VALUES (?)
to something like INSERT INTO ... VALUES (NULLIF(?, ''))
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With