Skip to content
Oleg Grigoriev edited this page Mar 26, 2016 · 1 revision

Настройки совместимости

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

Если очень-очень надо, можно включить старое поведение с помощью статического класса Compat:

Compat::setOpt('null', false);

Или с помощью параметра _compat:

$params = [
    '_adapter' => '_mysql',
    'host' => 'localhost',
    '_compat' => [
        'null' => false,
    ],
];

Настройки, указанные в параметре _compat имеют для этого конкретного объекта приоритет над глобальными. указанными через Compat::setOpt().

null

Единственный на данный момент параметр - null. По умолчанию он равен TRUE, что означает "добавлять модификатор null ко всем плейсхолдерам".

В старых версиях библиотеки, по умолчанию, если во входных данных был NULL, он рассматривался просто, как пустое значение:

$pattern = 'UPDATE `table` SET `a`=?, `b`=?i';
$data = [null, null];

$db($pattern, $data); // UPDATE `table` SET `a`="", `b`=0

Чтобы NULL из PHP приводился к NULL в SQL нужно было добавить к плейсхолдерам модификатор n (или null в полной форме):

$pattern = 'UPDATE `table` SET `a`=?n, `b`=?in';
$data = [null, null];

$db($pattern, $data); // UPDATE `table` SET `a`=NULL, `b`=NULL

В новых версиях эта чепуха исправлена и NULL всегда приводится к NULL. Модификатор n остался, но он ничего нового не привносит.

Compat::setOpt('null', false) включает старое поведение.

Clone this wiki locally