如果在循环中使用MySQLi预处理语句,何时调用bind_param?

时间:2012-12-12 17:17:13

标签: php mysql loops mysqli

我正在尝试学习如何使用MySQLi的预准备语句来插入数据。

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

  • 是在我的循环之前还是在我的循环中呼叫bind_param
  • 是否在调用bind_param
  • 之前或之后为我的变量指定值

大多数关于预准备语句的教程都使用PDO。使用PDO,可以将参数值数组传递给execute,从而无需调用bindParam。 MySQLi不是这种情况。

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

  1. 为变量赋值
  2. 准备陈述
  3. 绑定变量
  4. 执行
  5. 靠近
  6. 根据上述情况判断,我假设我需要在循环中调用bind语句。

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

    1. 准备陈述
    2. 绑定变量
    3. 为变量赋值
    4. 执行
    5. 为变量赋值
    6. 执行
    7. 靠近
    8. 请注意,此示例未显示的一件事是首次声明变量的位置。我认为将未声明的变量传递给bind_param会产生通知。我终于发现我可以传递未定义的变量,因为它们是通过引用传递的。

      问题
      一种操作顺序优先于另一种操作吗?或者它只取决于你在做什么?是否有任何陷阱?

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

1 个答案:

答案 0 :(得分:3)

由于参数通过参考 传递,您可以在 之前将值分配给变量致bind_param的电话。无论哪种方式都可行。

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

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