6

我正在尝试学习如何将准备好的语句与 MySQLi 一起使用来插入数据。

尽管准备好的语句因其能够有效地重复执行类似语句而受到称赞,但我似乎无法找到使用 MySQLi 在循环中执行多个语句的示例。我对以下内容特别困惑

  • bind_param是在我的循环之前还是在我的循环内调用
  • 是否在调用之前或之后为我的变量赋值bind_param

大多数关于准备好的语句的教程都使用 PDO。使用 PDO,可以将一组参数值传递给execute,而无需调用bindParam. MySQLi 并非如此。

PHP 手册mysqli_prepare条目有一个示例,显示了以下操作顺序:

  1. 给变量赋值
  2. 准备声明
  3. 绑定变量
  4. 执行

从以上判断,我假设我需要在循环中调用绑定语句。

但是,PHP 手册mysqli_stmt_execute条目有一个示例,显示了以下操作顺序:

  1. 准备声明
  2. 绑定变量
  3. 给变量赋值
  4. 执行
  5. 给变量赋值
  6. 执行

请注意,此示例未显示的一件事是首次声明变量的位置。我认为将未声明的变量传递给bind_param会生成一个通知。我终于发现我可以传递未定义的变量,因为它们是通过引用传递的。

问题
一种操作顺序是否优于另一种操作顺序?还是仅仅取决于你在做什么?其中一个有什么问题吗?

注意:代码已经使用 MySQLi,我不想切换到 PDO(现在切换超出了本项目的范围)。

4

1 回答 1

7

因为参数是通过引用传递的,所以可以在调用之前之后将值赋给变量bind_param。无论哪种方式都会奏效。

如果变量是按值传递的则每次更改它们的值时都需要绑定它们。但是由于它们是通过引用传递的,因此您只需要绑定它们一次。

在单次执行的情况下,操作顺序并不重要,可能取决于值的来源。在循环的情况下,您绝对应该bind_param在循环之前调用。

于 2012-12-12T17:55:17.673 回答