是否有必要使用 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
。
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);
我不知道为什么第一种方法不能始终如一地工作。感觉就像分享,似乎相关。
我在网上看到了一些关于使用 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
。
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);
我不知道为什么第一种方法不能始终如一地工作。感觉就像分享,似乎相关。