PHP: mysqli::$info - Manual (original) (raw)
mysqli_info
(PHP 5, PHP 7, PHP 8)
mysqli::$info -- mysqli_info — Retrieves information about the most recently executed query
Description
Object-oriented style
Procedural style
Possible mysqli_info return values
| Query type | Example result string |
|---|---|
| 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 |
Note:
Queries which do not fall into one of the preceding formats are not supported. In these situations, mysqli_info() will return an empty string.
Return Values
A character string representing additional information about the most recently executed query.
Examples
Example #1 $mysqli->info example
Object-oriented style
`<?php
mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); mysqli=newmysqli("localhost","myuser","mypassword","world");mysqli = new mysqli("localhost", "my_user", "my_password", "world");mysqli=newmysqli("localhost","myuser","mypassword","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);`
Procedural style
`<?php
mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); link=mysqliconnect("localhost","myuser","mypassword","world");mysqliquery(link = mysqli_connect("localhost", "my_user", "my_password", "world");mysqli_query(link=mysqliconnect("localhost","myuser","mypassword","world");mysqliquery(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));`
The above examples will output:
Records: 150 Duplicates: 0 Warnings: 0
See Also
- mysqli_affected_rows() - Gets the number of affected rows in a previous MySQL operation
- mysqli_warning_count() - Returns the number of warnings generated by the most recently executed query
- mysqli_num_rows() - Gets the number of rows in the result set
Found A Problem?
15 years ago
Might save someone some time...
<?php
$prototype='Rows matched: 0 Changed: 1 Warnings: 2';
list($matched, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mi>h</mi><mi>a</mi><mi>n</mi><mi>g</mi><mi>e</mi><mi>d</mi><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">changed, </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">c</span><span class="mord mathnormal">han</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mord mathnormal">e</span><span class="mord mathnormal">d</span><span class="mpunct">,</span></span></span></span>warnings) = sscanf($prototype, "Rows matched: %d Changed: %d Warnings: %d");
?>
1 year ago
I don't recall where I got this, but it is SUPER important information and I cannot believe it is missing from the documentation!
If you do a mysqli_info()/$mysqli->info() after a "INSERT INTO ... VALUES ()" that adds/updates JUST ONE ROW, then, mysqli::info() returns an empty result (!!!).
If it is empty (null on php 8+; in php 7 I don't know in which way it is empty) check $mysqli->affectedRows() or mysqli_affected_rows(). If that returns 2, the INSERT did a successful UPDATE of ONE record (so there must have been a ON DUPLICATE KEY UPDATE). If it returns 1: there was an INSERT of ONE record.
This is not a bug, this is BY DESIGN, although it does remind me strongly of "This is not a bug, this is a feature" Microsoft of the 90's. I have no clue why you would design it this way except for some weird and extremely old backward compatibility issues.vzverev [at] newmail.ru (Vasiliy Zverev) ¶
8 years ago
If inserted just one row, mysqli_info() returns empty string which might be confusing, but mysqli_affected_rows() returns 1 in this case.