A mysqli_stmt
не имеет функции query_params()
, я должен был написать свою собственную. Параметр arry связан с оператором с помощью bind_param()
. Мне нужно указать типы переменных динамически. Я мог бы сделать это с чем-то вроде:
$sType = '';
foreach ($aParameters as $iIndex => $mParameter) {
if (is_string($mParameter)) {$sType .= 's';}
elseif ( is_int($mParameter)) {$sType .= 'i';}
elseif ( is_float($mParameter)) {$sType .= 'd';}
elseif ( is_null($mParameter)) {$sType .= 's';}
elseif ( is_bool($mParameter)) {
$sType .= 'i';
$aParameters[$iIndex] = boolval($mParameter);}
else {
// trow new Exception(...);
}
}
Но, как выясняется, mysql / mariadb будет отправлять логические значения, целые числа и числа с плавающей точкой в виде строк, где сервер базы данных с радостью приведёт их к соответствующему типу данных столбца. Похоже, я мог бы просто пропустить этот шаг и отправить каждый параметр в виде строки по умолчанию.
Есть ли причины для указания другого типа данных, чем "s"
для каждого параметра?
РЕДАКТИРОВАТЬ: я только что нашел этот раздел SO , который показывает, как использовать тип "b" и mysqli_stmt::send_long_data
, когда двоичный пакет будет превышать max_allowed_packet
настройка. Я также читал, что это улучшит производительность по сравнению с решениями, которые используют bin2hex()
, чтобы превратить отправку байтовой строки в текст.