Выполнить подготовленный оператор PDO с массивом, содержащим нулевые значения - PullRequest
4 голосов
/ 23 августа 2011

В настоящее время у меня есть массив, который содержит значения из формы для вставки в базу данных с использованием PDO.

Некоторые значения являются необязательными полями и поэтому иногда будут заполняться, а другие - NULL.

Таблица, в которую я вставляю, имеет длину примерно 50 строк, и я использую следующее:

$sth = Database::get()->prepare("INSERT INTO $this->_insertTbl
                                 (field1, field2, field3)
                                 VALUES
                                 (:field1, :field2, :field3)");
$sth->execute($dataArr);

$dataArr иногда может содержать нулевые значения, такие как:

Array
(
    [field1] => 44
    [field2] => NULL
    [field3] => Jammin
}

А иногда нет:

Array
(
    [field1] => 44
    [field2] => Harry
    [field3] => William
}

Это нормально работает как с полностью заполненными переменными, так и с пустыми строками, но, похоже, не работает с некоторыми NULL значениями.

ОбычноНасколько я понимаю, вы бы использовали bindValue вместо bindParam, однако, поскольку я выполняю оператор с массивом, есть ли способ обойти это, или мне нужно перечислить каждый из них по отдельности?

1 Ответ

0 голосов
/ 23 августа 2011

NULL не работает со связанными параметрами в моем опыте.Просто пропустите присвоение, если значение NULL.

Я также заменил NULL на пустые строки до ...

$params = array_map(function($param) {
    return is_null($param) ? '' : $param;
}, $params);

CodePad .

(Предполагается, что вам повезло быть> = PHP 5.3.)

Обновить

Превратить имена и значения столбцов в массив и объединить их с join().

Это позволяет вам легко создавать определенных участников при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...