简体   繁体   中英

Insert NULL instead of empty string with PDO

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?

如果你想要null,只需插入null而不是空字符串。

$stmt2->bindParam(':title', $title === '' ? null : $title, PDO::PARAM_STR);

除了xdazz更合适的答案,你通常可以在SQL中解决这样的问题:只需将查询INSERT INTO ... VALUES (?)改为INSERT INTO ... VALUES (NULLIF(?, ''))

This works really Goog, anothe option is with IF $val == null || $val == 'null' || $vall =='' BindValue with PDO::PARAM_NULL ELSE BindValue with PDO::PARAM_STR

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM