我一直在测试我的mysqli预处理语句的包装器,并且遇到了一些我没想到的东西。在我的表guest中,first_name是varchar [32](基本上是一个字符串),id是一个整数。我的函数在下面的示例中对$ first_name和$ id等参数使用getType来为bind_param方法构建$ types参数。我已经准备好解决诸如从表单输入中获取$ 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的方式是一个因素吗?无论如何,我很想知道原因。
答案 0 :(得分:1)
$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语句的有效性。