当我称bind_param如果使用的MySQLi准备在一个循环语句?(When do I call

2019-07-05 01:58发布

我想学习如何使用准备好的语句与库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(现在切换是这个项目的范围之内)。

Answer 1:

因为参数是通过引用传递 ,你可以之前之后的调用将值赋给变量bind_param 。 两种方式均有效。

如果变量是按传递,则需要在每次改变了他们的价值的时间约束他们。 但由于它们是通过引用传递,你只需要一次约束力。

在一个单一的情况下执行,操作的顺序并不重要,可能取决于其中的值的来源。 在一个循环的情况下,你一定要叫bind_param循环之前。



文章来源: When do I call bind_param if using MySQLi prepared statements in a loop?