在 mysql ext 的 php_mysql.c 中是这样写的:/* {{{ proto int mysql_affected_rows([int link_identifier]) Gets number of affected rows in previous MySQL operation */ PHP_FUNCTION(mysql_affected_rows) { zval **mysql_link; int id; php_mysql_conn *mysql;
switch(ZEND_NUM_ARGS()) { case 0: id = MySG(default_link); CHECK_LINK(id); break; case 1: if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) { RETURN_FALSE; } id = -1; break; default: WRONG_PARAM_COUNT; break; }
操作成功返回正数,失败返回负数
MYSQL倒好说,但是MSSQL每次可以执行N行SQL,并且可以事务,存储过程等等,用这个函数来取影响行数保险不?还是数据库本身会返回一个影响行数的回执给PHP?
Gets number of affected rows in previous MySQL operation */
PHP_FUNCTION(mysql_affected_rows)
{
zval **mysql_link;
int id;
php_mysql_conn *mysql;
switch(ZEND_NUM_ARGS()) {
case 0:
id = MySG(default_link);
CHECK_LINK(id);
break;
case 1:
if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
RETURN_FALSE;
}
id = -1;
break;
default:
WRONG_PARAM_COUNT;
break;
}
ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);
/* conversion from int64 to long happing here */
Z_LVAL_P(return_value) = (long) mysql_affected_rows(&mysql->conn);
Z_TYPE_P(return_value) = IS_LONG;
}
/* }}} */内部调用了 mysql_affected_rows 这个 mysql 自身提供的 api。
PS: 同 mysql_insert_id 一样,由于 Z_LVAL_P(return_value) = (long) mysql_affected_rows(&mysql->conn); 这句导致如果记录数超过 LONG_MAX 会出问题(不过貌似没可能有那么多条数据吧)。
比如如果执行多条SQL,那么返回的到底是那行SQL的影响行数?
MYSQL因为同时只能执行一条SQL,所以返回的结果就不说了
但是MSSQL是可以同时执行多条SQL语句的,那么,如果调用的是MSSQL的API,它执行多条语句后返回的是一个什么结果?