mysqli_stmt :: bind_param中$ types参数的重要性

时间:2011-12-18 22:48:48

标签: php mysqli prepared-statement

我一直在测试我的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的方式是一个因素吗?无论如何,我很想知道原因。

1 个答案:

答案 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语句的有效性。