我正在尝试学习如何将准备好的语句与MySQLi一起使用来插入数据。
尽管准备好的语句因其能够高效地重复执行类似语句而备受赞誉,但我似乎找不到使用MySQLi在循环中执行多个语句的例子。我尤其对以下内容感到困惑:
- 是在循环之前还是在循环内部调用
bind_param
- 是在调用
bind_param
之前还是之后为我的变量赋值
大多数关于准备语句的教程都使用PDO。使用PDO,可以将参数值的数组传递给execute
,从而无需调用bindParam
。MySQLi的情况并非如此。
PHP手册mysqli_prepare
条目有一个示例,显示了以下操作顺序:
- 为变量赋值
- 编制报表
- 绑定变量
- 执行
- 关闭
根据上面的判断,我认为我需要在循环中调用bind语句。
然而,PHP手册mysqli_stmt_execute
条目中有一个示例显示了以下操作顺序:
- 准备声明
- 绑定变量
- 为变量赋值
- 执行
- 为变量赋值
- 执行
- 关闭
注意,这个例子没有显示变量首先声明的地方。我认为将未声明的变量传递给bind_param
会产生一个通知。我终于发现,我可以传递未定义的变量,因为它们是通过引用传递的。
问题:
一个操作顺序优先于另一个吗?还是仅仅取决于你在做什么?其中一个有问题吗?
注意:代码已经使用MySQLi,我不想切换到PDO(现在切换不在这个项目的范围内)。
因为参数是引用传递的,所以可以在调用bind_param
之后将值分配给之前或之后的变量。无论哪种方式都可行。
如果变量是通过值传递的,则每次更改其值时都需要绑定它们。但是由于它们是通过引用传递的,所以您只需要绑定它们一次。
在单次执行的情况下,操作的顺序实际上并不重要,可能取决于值的来源在循环的情况下,您肯定应该在循环之前调用bind_param