我正在尝试学习如何使用MySQLi的预准备语句来插入数据。
尽管准备好的语句因其重复执行类似语句的能力而受到称赞,但我似乎无法找到使用MySQLi在循环中执行多个语句的示例。我特别对以下感到困惑:
bind_param
bind_param
大多数关于预准备语句的教程都使用PDO。使用PDO,可以将参数值数组传递给execute
,从而无需调用bindParam
。 MySQLi不是这种情况。
PHP手册mysqli_prepare
条目有一个示例,显示以下操作顺序:
根据上述情况判断,我假设我需要在循环中调用bind语句。
但是,PHP手册mysqli_stmt_execute
条目有一个示例,显示以下操作顺序:
请注意,此示例未显示的一件事是首次声明变量的位置。我认为将未声明的变量传递给bind_param
会产生通知。我终于发现我可以传递未定义的变量,因为它们是通过引用传递的。
问题:
一种操作顺序优先于另一种操作吗?或者它只取决于你在做什么?是否有任何陷阱?
注意:代码已使用MySQLi,我不想切换到PDO(现在切换超出了本项目的范围)。
答案 0 :(得分:3)
由于参数通过参考 传递,您可以在 或 之前将值分配给变量致bind_param
的电话。无论哪种方式都可行。
如果变量是通过 value 传递的,则每次更改值时都需要绑定它们。但由于它们是通过引用传递的,因此您只需将它们绑定一次。
在单次执行的情况下,操作顺序并不重要,可能取决于值的来源。 如果是循环,您应该在循环之前调用bind_param
。