важность параметра $ types в mysqli_stmt :: bind_param - PullRequest
0 голосов
/ 19 декабря 2011

Я проверял свою обертку на подготовленные mysqli утверждения и наткнулся на то, чего я не ожидал. В моем гостевом столе first_name - это varchar [32] (в основном строка), а id - целое число. Моя функция использует getType для таких параметров, как $ first_name и $ id в приведенном ниже примере, для создания параметра $ types для метода bind_param. Я был готов заняться такими вопросами, как то, что происходит, когда $ id берется из ввода формы и фактически является строкой, или, что происходит, если somweone вводит строку, которая является числом, когда я понял, что это не имеет значения 0_0

$SQL = 'update guests set first_name = ? where id = ?';
$mysqli->execute($SQL, $first_name, $id);

все следующие случаи привели к успешной вставке:

$ id = "1"; $ first_name = "Frank"; $ types param был 'ss';

$ id = 1; $ first_name = 3; $ types param был 'ii';

Так в чем же дело?

редактировать:

call_user_func_array(array($statement, 'bind_param'), $bind_params);

Вы думаете, что способ, которым я называю bind_param, является фактором? В любом случае, я хотел бы знать, почему.

1 Ответ

1 голос
/ 19 декабря 2011

Параметр $types влияет на сгенерированный SQL, поэтому первый пример дает следующий SQL:

update guests set first_name = 'Frank' where id = '1';

, а второй:

update guests set first_name = 3 where id = 1;

Оба являются допустимыми операторами SQL, так как MySQL обрабатывает преобразование типов для вас.Следовательно, параметр $types имеет значение, но только до действительности оператора SQL, который он генерирует.

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