PHP MySQLi 无需bind_param即可执行

PHP MySQLi execute without bind_param

提问人:Jose Manuel Abarca Rodríguez 提问时间:8/12/2022 最后编辑:DharmanJose Manuel Abarca Rodríguez 更新时间:8/12/2022 访问量:120

问:

“execute”的 PHP 文档包括示例 #2https://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

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

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

我使用的是PHP版本7.2.18。

php mysqli 预备语句

评论

3赞 Barmar 8/12/2022
此功能是在 8.1.0 中添加的。查看更新日志
0赞 CFulford 8/12/2022
从 php 版本 5.1 开始,您可以使用 PDO 而不是 mysqli 执行所需的操作 php.net/manual/en/pdostatement.execute.php

答:

4赞 Dharman 8/12/2022 #1

execute 中的绑定仅在 PHP 8.1 之前可用。如果您运行的是 PHP 8.0,传递额外的参数将抛出错误。

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

值得指出的是,此功能自 PHP 5 在 PDO 扩展中可用。PDO 具有更多功能并且更易于使用,因此如果您没有强烈使用 mysqli 的需求,请改用 PDO。