mysqli::$info

mysqli_info

(PHP 5, PHP 7, PHP 8)

mysqli::$info -- mysqli_info检索有关最近执行的查询的信息

说明

面向对象风格

过程式风格

mysqli_info(mysqli $mysql): ?string

函数 mysqli_info() 返回一个字符串,提供有关最近执行的查询的信息。该字符串的性质在下面给出

可能的 mysqli_info 返回值
查询类型 示例结果字符串
INSERT INTO...SELECT... Records: 100 Duplicates: 0 Warnings: 0
INSERT INTO...VALUES (...),(...),(...) Records: 3 Duplicates: 0 Warnings: 0
LOAD DATA INFILE ... Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
ALTER TABLE ... Records: 3 Duplicates: 0 Warnings: 0
UPDATE ... Rows matched: 40 Changed: 40 Warnings: 0

注意:

不支持不属于上述格式的查询。在这些情况下,mysqli_info() 将返回一个空字符串。

参数

mysql

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

返回值

一个字符字符串,表示有关最近执行的查询的附加信息。

示例

示例 #1 $mysqli->info 示例

面向对象风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$mysqli->query("CREATE TEMPORARY TABLE t1 LIKE City");

/* INSERT INTO ... SELECT */
$mysqli->query("INSERT INTO t1 SELECT * FROM City ORDER BY ID LIMIT 150");
printf("%s\n", $mysqli->info);

过程式风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

mysqli_query($link, "CREATE TEMPORARY TABLE t1 LIKE City");

/* INSERT INTO ... SELECT */
mysqli_query($link, "INSERT INTO t1 SELECT * FROM City ORDER BY ID LIMIT 150");
printf("%s\n", mysqli_info($link));

上面的示例将输出

Records: 150  Duplicates: 0  Warnings: 0

参见

添加备注

用户贡献的备注 3 notes

user at biglake dot com
13 年前
可能节省某人一些时间...

<?php
$prototype
='Rows matched: 0 Changed: 1 Warnings: 2';
list(
$matched, $changed, $warnings) = sscanf($prototype, "Rows matched: %d Changed: %d Warnings: %d");
?>
Rumour
2 个月前
我不记得我从哪里得到这个信息,但它非常重要,我无法相信它没有出现在文档中!

如果你在执行 "INSERT INTO ... VALUES ()" 后,该语句只添加/更新了一行,然后执行 mysqli_info()/$mysqli->info(),那么 mysqli::info() 会返回空结果(!!!)。

如果它为空(php 8+ 中为 null;在 php 7 中我不知道它以何种方式为空),请检查 $mysqli->affectedRows() 或 mysqli_affected_rows()。如果返回 2,则 INSERT 成功更新了 一条记录(所以一定存在 ON DUPLICATE KEY UPDATE)。如果返回 1:插入了一条记录。

这不是 bug,这是 BY DESIGN,尽管它强烈地让我想起 90 年代的微软的 "这不是 bug,这是一个特性"。除了某些奇怪且非常古老的向后兼容性问题,我不知道为什么你会这样设计它。
vzverev [at] newmail.ru (Vasiliy Zverev)
7 年前
如果只插入了一行,mysqli_info() 会返回空字符串,这可能会让人困惑,但 mysqli_affected_rows() 在这种情况下会返回 1。
To Top