PHP PDO вставьте NULL вместо пустого potsgresql - PullRequest
6 голосов
/ 29 января 2012

Я использую PHP PDO с бэкэндом Postgresql. У меня есть таблица, в которой есть некоторые пустые поля, и когда пользователь ничего не вводит в поле формы HTML, я хочу вставить NULL в это поле, а не пустую строку (это важно, поскольку некоторые из моих SELECTs в этих таблицах позже используют такие условия поскольку ГДЕ Х НЕ НУЛЬ)).

Однако эта версия кода bindParam вставляет пустую строку в пустое поле вместо NULL.

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

Я немного прочитал и понял, что это ответ для вставки пустого значения в поле:

$stmt2->bindParam(':title', $title, PDO::PARAM_NULL);

но это означает, что мне нужно предварительно проверить все параметры, которые передаются в пустые поля, чтобы определить, являются ли они пустыми, и если это так, передать PDO :: PARAM_NULL вместо PDO_PARAM_STR. Я, конечно, могу это сделать, но надеялся, что может быть настройка, которая просто сообщит PDO, если он встретит пустую строку, вместо этого вставьте null.

Я наткнулся на это

$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING);

но это не имеет никакого эффекта, и, учитывая дальнейшие исследования, я думаю, что это влияет только на запись при выходе, а не при входе.

Какие-либо опции, кроме предварительной проверки переменных?

спасибо Аарон

Ответы [ 2 ]

7 голосов
/ 29 января 2012

Если вы хотите ноль, просто вставьте null вместо пустой строки.

$stmt2->bindParam(':title', $title === '' ? null : $title, PDO::PARAM_STR);
1 голос
/ 29 января 2012

Помимо более подходящего ответа xdazz, вы часто можете решить что-то вроде этого в SQL: просто перефразируйте запрос INSERT INTO ... VALUES (?) во что-то вроде INSERT INTO ... VALUES (NULLIF(?, '')).

...