提问人:Jose Manuel Abarca Rodríguez 提问时间:8/12/2022 最后编辑:DharmanJose Manuel Abarca Rodríguez 更新时间:8/12/2022 访问量:120
PHP MySQLi 无需bind_param即可执行
PHP MySQLi execute without bind_param
问:
“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
但它没有用,没有插入任何东西,也没有错误消息或警告。我还尝试使用变量而不是静态值作为执行
参数,但也没有用。
我错过了什么吗?我是否误解了这个例子?那么bind_param
是否有必要,执行
不应该获取要插入的值?
我使用的是PHP版本7.2.18。
答:
4赞
Dharman
8/12/2022
#1
execute 中的绑定仅在 PHP 8.1 之前可用。如果您运行的是 PHP 8.0,传递额外的参数将抛出错误。
如果您使用 PHP 7 或更早版本,则将数组作为参数传递给触发未定义的行为。这就是为什么你看不到任何错误,它只是不起作用。execute()
值得指出的是,此功能自 PHP 5 在 PDO 扩展中可用。PDO 具有更多功能并且更易于使用,因此如果您没有强烈使用 mysqli 的需求,请改用 PDO。
评论