PHP Conference Japan 2024

mysql_info

(PHP 4 >= 4.3.0, PHP 5)

mysql_info获取最近查询的信息

警告

此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中移除。应改用 MySQLiPDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南。此函数的替代方案包括

描述

mysql_info(资源 $link_identifier = NULL): 字符串

返回有关上次查询的详细信息。

参数

link_identifier

MySQL 连接。如果未指定链接标识符,则假定为 mysql_connect() 打开的最后一个链接。如果找不到此类链接,它将尝试创建一个链接,就像 mysql_connect() 未带任何参数调用一样。如果未找到或建立连接,则会生成 E_WARNING 级别错误。

返回值

成功时返回有关语句的信息,失败时返回 false。有关哪些语句提供信息以及返回值可能是什么样子,请参见下面的示例。未列出的语句将返回 false

示例

示例 #1 相关的 MySQL 语句

返回字符串值的语句。这些数字仅用于说明目的;它们的值将对应于查询。

INSERT INTO ... SELECT ...
String format: Records: 23 Duplicates: 0 Warnings: 0 
INSERT INTO ... VALUES (...),(...),(...)...
String format: Records: 37 Duplicates: 0 Warnings: 0 
LOAD DATA INFILE ...
String format: Records: 42 Deleted: 0 Skipped: 0 Warnings: 0 
ALTER TABLE
String format: Records: 60 Duplicates: 0 Warnings: 0 
UPDATE
String format: Rows matched: 65 Changed: 65 Warnings: 0

注释

注意:

mysql_info() 仅当语句中指定了多个值列表时,才为 INSERT ... VALUES 语句返回非 false 值。

参见

添加注释

用户贡献的注释 4 个注释

8
info at granville dot nl
19 年前
我快速转换了 eric 的函数,只是为了计算查询中匹配或受影响的行数。

/**GD gdf_db_count_query_v1:返回上次查询匹配或受影响的行数。必须在相关查询后立即使用。
*/

function gdf_db_count_query($link = 'dbh') {

$info_str = mysql_info($$link);

if (ereg("Records: ([0-9]*)", $info_str, $count) == false) {
ereg("Rows matched: ([0-9]*)", $info_str, $count);
}

return $count;

}
6
eric at projectsatellite dot com
21 年前
我同意这是一个有用的函数,当尝试检查更新查询是否匹配特定行时可以使用。我创建了一个简单的函数,它返回一个关联数组,其中包含返回字符串中分隔的值。

function get_mysql_info($linkid = null){
$linkid? $strInfo = mysql_info($linkid) : $strInfo = mysql_info();

$return = array();
ereg("Records: ([0-9]*)", $strInfo, $records);
ereg("Duplicates: ([0-9]*)", $strInfo, $dupes);
ereg("Warnings: ([0-9]*)", $strInfo, $warnings);
ereg("Deleted: ([0-9]*)", $strInfo, $deleted);
ereg("Skipped: ([0-9]*)", $strInfo, $skipped);
ereg("Rows matched: ([0-9]*)", $strInfo, $rows_matched);
ereg("Changed: ([0-9]*)", $strInfo, $changed);

$return['records'] = $records[1];
$return['duplicates'] = $dupes[1];
$return['warnings'] = $warnings[1];
$return['deleted'] = $deleted[1];
$return['skipped'] = $skipped[1];
$return['rows_matched'] = $rows_matched[1];
$return['changed'] = $changed[1];

return $return;
}

尝试更新可能存在也可能不存在的行后,您可以像这样使用上述函数

$vals = get_mysql_info($linkid);
if($vals['rows_matched'] == 0){
mysql_query("INSERT INTO table values('val1','val2', 'valetc')", $linkid);
}
4
tomas at matfyz dot cz
15 年前
请注意,由于 mysql 错误 #41283 和 #41285,无法从 mysql_info() 获取警告计数信息

http://bugs.mysql.com/?id=41283
http://bugs.mysql.com/?id=41285
1
bdobrica at gmail dot com
18 年前
作为对先前帖子中提到的问题的解决方案,即当您进行更新查询并且字段未修改(尽管查询有效)时,mysql_affected_rows() 返回 0,我发布了以下函数。它非常简单,并且基于先前的帖子。

function mysql_modified_rows () {
$info_str = mysql_info();
$a_rows = mysql_affected_rows();
ereg("Rows matched: ([0-9]*)", $info_str, $r_matched);
return ($a_rows < 1)?($r_matched[1]?$r_matched[1]:0):$a_rows;
}

希望您会发现它有用。
To Top