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

tox*_*lot 4 php mysql mysqli loops

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

即使准备好的语句因有效地重复执行相似的语句而受到赞扬,我似乎也找不到使用MySQLi在循环中执行多个语句的示例。我对以下内容特别困惑

  • bind_param在循环之前还是在循环内部调用
  • 在调用之前还是之后将值分配给我的变量 bind_param

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

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

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

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

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

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

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

问题
一个操作顺序是否比另一个操作顺序优先?还是仅取决于您在做什么?彼此之间有麻烦吗?

注意:该代码已经使用MySQLi,并且我不想切换到PDO(现在切换不在此项目范围内)。

tox*_*lot 5

由于参数是通过引用传递的,因此您可以在调用之前之后将值分配给变量bind_param。无论哪种方式都可以。

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

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