gpt4 book ai didi

PHP MySQLi 在没有 bind_param 的情况下执行

转载 作者:行者123 更新时间:2023-12-05 02:27:18 25 4
gpt4 key购买 nike

'execute' 的 PHP 文档包含如下所示的示例 #2 ( https://www.php.net/manual/en/mysqli-stmt.execute.php#example-1489):

$stmt = $mysqli->prepare('INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)');

$stmt->execute( ['Stuttgart', 'DEU', 'Baden-Wuerttemberg'] );

注意没有stmt->bind_param,这些值被添加为execute的数组参数.

我试图通过创建表并运行代码来使这个示例工作:

CREATE TABLE myCity
(
Name VARCHAR(99),
CountryCode VARCHAR(99),
District VARCHAR(99)
) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4 COLLATE=UTF8MB4_UNICODE_CI

但是它没有用,没有插入任何东西,也没有错误信息或警告。我还尝试使用变量而不是静态值作为 execute 的参数,但也没有用。

我错过了什么吗?我误解了这个例子吗?那么 bind_param 是否必要并且 execute 不应该获取要插入的值?

我使用的是 PHP 版本 7.2.18。

最佳答案

执行中的绑定(bind)仅适用于 PHP 8.1。如果您运行的是 PHP 8.0,传递额外参数将引发错误。

如果您使用 PHP 7 或更早版本,将数组作为参数传递给 execute() 会触发未定义的行为。这就是为什么您看不到任何错误并且它只是不起作用的原因。

值得指出的是,此功能自 PHP 5 起在 PDO 扩展中可用。 PDO 的特性更多,也更容易使用,所以如果你对使用 mysqli 的需求不是很强烈,就用 PDO 吧。

关于PHP MySQLi 在没有 bind_param 的情况下执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73324538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com