【发布时间】:2012-11-30 11:21:24
【问题描述】:
我正在尝试学习如何在 MySQLi 中使用准备好的语句来插入数据。
尽管准备好的语句因其能够有效地重复执行类似语句而受到称赞,但我似乎无法找到使用 MySQLi 在循环中执行多个语句的示例。我特别对以下内容感到困惑:
- 是在循环前还是循环内调用
bind_param - 在调用
bind_param之前或之后是否给我的变量赋值
大多数关于准备好的语句的教程都使用 PDO。使用 PDO,可以将一组参数值传递给execute,从而无需调用bindParam。 MySQLi 并非如此。
PHP 手册mysqli_prepare 条目有一个示例,显示了以下操作顺序:
- 为变量赋值
- 准备声明
- 绑定变量
- 执行
- 关闭
根据上述判断,我假设我需要在循环中调用绑定语句。
但是,PHP 手册 mysqli_stmt_execute 条目有一个示例,显示了以下操作顺序:
- 准备声明
- 绑定变量
- 为变量赋值
- 执行
- 为变量赋值
- 执行
- 关闭
请注意,此示例未显示的一件事是变量的首次声明位置。我认为将未声明的变量传递给bind_param 会生成通知。我终于发现我可以传递未定义的变量,因为它们是通过引用传递的。
问题:
一种操作顺序是否优于另一种操作顺序?还是仅仅取决于你在做什么?两者之间有什么问题吗?
注意:代码已经使用 MySQLi,我不想切换到 PDO(现在切换超出了本项目的范围)。
【问题讨论】:
-
你在循环什么?您可以在循环中调用
bind_param,然后调用execute。我没有完全理解我猜想的问题。 -
您绝对应该在之前
bind_param设置变量。它会让调试变得非常更容易。 -
我的困惑源于陷入了“通过价值”的心态。我一直在想,我应该在更改值后重新绑定它们。