是否有必要使用MySQLi和PHP Prepared Statements初始化语句

时间:2015-03-12 03:05:51

标签: php mysqli prepared-statement

我在网上看过一些关于使用PHP Prepared Statements和MySQLi的教程。有些人正在使用mysqli_stmt mysqli::stmt_init()之类的:

$stmt = $mysqli->stmt_init();

调用prepare()以及预备语句的其他属性和方法

有些不像

那样初始化
if ($stmt = $mysqli->prepare("INSERT INTO CodeCall (FirstName, LastName) values (?, ?)")) {}

现在我的问题是,是否有必要初始化要使用的对象?

由于

2 个答案:

答案 0 :(得分:2)

不,没有必要。我一直使用MySQLi,从未使用过该方法。您可以像在这些示例中看到的那样使用mysqli::prepare

The documentation says

  

分配并初始化适用于mysqli_stmt_prepare()的语句对象。

     

在调用mysqli_stmt_prepare()之前,对任何mysqli_stmt函数的任何后续调用都将失败。

所以听起来这就是"手册"创建预准备语句的方法,因为它需要更多步骤。另一个mysqli::prepare方法只需一步即可处理。

答案 1 :(得分:1)

可能是必要的。我最近遇到了一个问题,我这样做:

<Highlighter searchWords={[this._input]} textToHighlight={value} />

这适用于我的本地虚拟机。它适用于我们的登台服务器。但它拒绝在我们为客户端设置的服务器上进行测试。客户端的这个服务器是登台服务器的精确克隆,所以它应该有效。经过调试后,我发现$ stmt从未初始化,所以当$ stmt-&gt; execute()时,应用程序总是会爆炸。被叫了。

但是手动操作所有服务器和本地服务器:

$stmt = $mysqli->prepare

我不知道为什么第一种方法不能始终如一地工作。感觉像分享,似乎相关。