PHP Conference Japan 2024

mysqli::stmt_init

mysqli_stmt_init

(PHP 5, PHP 7, PHP 8)

mysqli::stmt_init -- mysqli_stmt_init初始化一个语句并返回一个用于 mysqli_stmt_prepare 的对象

描述

面向对象风格

public mysqli::stmt_init(): mysqli_stmt|false

过程化风格

mysqli_stmt_init(mysqli $mysql): mysqli_stmt|false

分配并初始化一个适合于 mysqli_stmt_prepare() 的语句对象。

注意:

在调用 mysqli_stmt_prepare() 之前,任何后续对任何 mysqli_stmt 函数的调用都将失败。

参数

mysql

仅过程化风格:由 mysqli_connect()mysqli_init() 返回的 mysqli 对象

返回值

返回一个对象。

参见

添加注释

用户贡献的注释 2 条注释

Jeff C
8 年前
stmt_init() 似乎清除了数据库连接上的先前(可能错误的)结果,这意味着您不一定要使用它,但它可以使代码更健壮。

在一个 PHPUnit 测试中,我有一系列在相同连接上的预处理查询。其中一个从 SELECT 中获取一行,但没有继续获取直到耗尽连接,因此它留下了一些陈旧的结果。当下一个查询执行以下操作时

<?php
$db
= $this->getConnection()->getDbConnection();
$preparedQuery = $db->prepare ($query);
?>

prepare() 调用生成了一个错误:“命令不同步;您现在无法运行此命令。” 更改为以下内容

<?php
$db
= $this->getConnection()->getDbConnection();
$preparedQuery = $db->stmt_init();
$preparedQuery->prepare ($query);
?>

解决了这个问题。
mamdo7 at hotmail dot com
10 年前
您可以直接使用 $stmt = $mysqli->prepare(); 而无需 stmt-init()。我认为不需要 stmt-init。
To Top