例如:mysql_affectedRows(),mssql_affectedRows()都分别是怎么取到的影响行数?

解决方案 »

  1.   

    mysql_affectedRows($link )参数好像是   $link =mysql_connect(....);
    操作成功返回正数,失败返回负数
      

  2.   

    这个函数是以什么为根据来判断影响的行数呢?
    MYSQL倒好说,但是MSSQL每次可以执行N行SQL,并且可以事务,存储过程等等,用这个函数来取影响行数保险不?还是数据库本身会返回一个影响行数的回执给PHP?
      

  3.   

    在 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;
    }

    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 会出问题(不过貌似没可能有那么多条数据吧)。
      

  4.   

    内部原理呢?
    比如如果执行多条SQL,那么返回的到底是那行SQL的影响行数?
      

  5.   

    昨天竟然没有显示出来楼上的楼上的回复,谢谢,写的很明了
    MYSQL因为同时只能执行一条SQL,所以返回的结果就不说了
    但是MSSQL是可以同时执行多条SQL语句的,那么,如果调用的是MSSQL的API,它执行多条语句后返回的是一个什么结果?