-
Notifications
You must be signed in to change notification settings - Fork 11
Compat
Новые версии библиотеки стараются сохранять обратную совместимость со старыми. Но иногда, совсем уж старое и редко используемое может удаляться.
Если очень-очень надо, можно включить старое поведение с помощью статического класса Compat
:
Compat::setOpt('null', false);
Или с помощью параметра _compat
:
$params = [
'_adapter' => '_mysql',
'host' => 'localhost',
'_compat' => [
'null' => false,
],
];
Настройки, указанные в параметре _compat
имеют для этого конкретного объекта приоритет над глобальными. указанными через Compat::setOpt()
.
Единственный на данный момент параметр - 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)
включает старое поведение.