是否有必要使用 MySQLi 和 PHP 准备语句初始化语句

Is it necessary to Initialize a statement using MySQLi and PHP Prepared Statements

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

$stmt = $mysqli->stmt_init();

调用prepare()等预处理语句的属性和方法

还有一些没有像

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

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

谢谢

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

The documentation says:

Allocates and initializes a statement object suitable for mysqli_stmt_prepare().

Any subsequent calls to any mysqli_stmt function will fail until mysqli_stmt_prepare() was called.

听起来这是创建准备好的语句的“手动”方式,因为它需要更多步骤。另一种 mysqli::prepare 方法一步处理。

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

$stmt = $mysqli->prepare

这在我的本地 VM 上有效。它在我们的登台服务器上工作。但是它拒绝在我们为客户端测试设置的服务器上工作。这个客户端服务器是登台服务器的精确克隆,所以它应该可以工作。调试后我发现 $stmt 从未被初始化,所以应用程序总是在 $stmt->execute(); 时崩溃。被调用了。

但是在所有服务器和本地手动执行此操作:

$stmt = $mysqli->stmt_init();
$stmt->prepare($sql);

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