mirror of
https://github.com/php/php-src.git
synced 2024-12-04 23:34:25 +08:00
Fix a bug and a test
This commit is contained in:
parent
bb4051d480
commit
0c65a68fc9
@ -160,17 +160,77 @@ require_once('skipifconnectfailure.inc');
|
||||
if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[029] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (!mysqli_stmt_prepare($stmt, 'SELECT label FROM test WHERE id = 100') ||
|
||||
!mysqli_stmt_execute($stmt))
|
||||
printf("[030] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||
|
||||
/* use it like num_rows */
|
||||
/* PS are unbuffered, num_rows cannot determine the row count before all rows have been fetched and/or buffered */
|
||||
if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[031] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
|
||||
printf("[032] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (!mysqli_stmt_store_result($stmt))
|
||||
printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||
|
||||
if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[034] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (1 !== ($tmp = mysqli_stmt_num_rows($stmt)))
|
||||
printf("[035] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
mysqli_stmt_free_result($stmt);
|
||||
mysqli_stmt_close($stmt);
|
||||
$stmt = mysqli_stmt_init($link);
|
||||
|
||||
if (!mysqli_stmt_prepare($stmt, 'SELECT label FROM test WHERE 1 = 2') ||
|
||||
!mysqli_stmt_execute($stmt))
|
||||
printf("[036] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||
|
||||
/* use it like num_rows */
|
||||
if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[037] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (true !== ($tmp = mysqli_stmt_store_result($stmt)))
|
||||
printf("[038] Expecting boolean/true, got %s\%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
|
||||
printf("[039] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (0 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[040] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
/* try to use stmt_affected_rows like stmt_num_rows */
|
||||
/* stmt_affected_rows is not really meant for SELECT! */
|
||||
if (mysqli_stmt_prepare($stmt, 'SELECT unknown_column FROM this_table_does_not_exist') ||
|
||||
mysqli_stmt_execute($stmt))
|
||||
printf("[041] The invalid SELECT statement is issued on purpose\n");
|
||||
|
||||
if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[042] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (false !== ($tmp = mysqli_stmt_store_result($stmt)))
|
||||
printf("[043] Expecting boolean/false, got %s\%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
|
||||
printf("[044] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[045] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
$stmt = mysqli_stmt_init($link);
|
||||
|
||||
if (!mysqli_stmt_prepare($stmt, "DROP TABLE IF EXISTS test") ||
|
||||
!mysqli_stmt_execute($stmt))
|
||||
printf("[030] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||
printf("[046] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||
|
||||
mysqli_stmt_close($stmt);
|
||||
|
||||
if (!is_null($tmp = mysqli_stmt_affected_rows($stmt)))
|
||||
printf("[031] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
|
||||
printf("[047] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
|
||||
|
||||
mysqli_close($link);
|
||||
|
||||
@ -180,4 +240,4 @@ require_once('skipifconnectfailure.inc');
|
||||
[009] [%d] (error message varies with the MySQL Server version, check the error code)
|
||||
|
||||
Warning: mysqli_stmt_affected_rows(): Couldn't fetch mysqli_stmt in %s on line %d
|
||||
done!
|
||||
done!
|
||||
|
@ -372,7 +372,6 @@ static
|
||||
void mysqlnd_internal_free_result(MYSQLND_RES *result TSRMLS_DC)
|
||||
{
|
||||
DBG_ENTER("mysqlnd_internal_free_result");
|
||||
|
||||
result->m.free_result_contents(result TSRMLS_CC);
|
||||
|
||||
if (result->conn) {
|
||||
@ -439,6 +438,7 @@ mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT *stmt TSRMLS_DC
|
||||
ret = FAIL;
|
||||
PACKET_INIT_ALLOCA(rset_header, PROT_RSET_HEADER_PACKET);
|
||||
do {
|
||||
SET_ERROR_AFF_ROWS(conn);
|
||||
if (FAIL == (ret = PACKET_READ_ALLOCA(rset_header, conn))) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading result set's header");
|
||||
break;
|
||||
@ -455,7 +455,6 @@ mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT *stmt TSRMLS_DC
|
||||
safe to unconditionally turn off the flag here.
|
||||
*/
|
||||
conn->upsert_status.server_status &= ~SERVER_MORE_RESULTS_EXISTS;
|
||||
conn->upsert_status.affected_rows = -1;
|
||||
/*
|
||||
This will copy the error code and the messages, as they
|
||||
are buffers in the struct
|
||||
@ -507,6 +506,9 @@ mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT *stmt TSRMLS_DC
|
||||
|
||||
MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_RSET_QUERY);
|
||||
memset(&conn->upsert_status, 0, sizeof(conn->upsert_status));
|
||||
/* restore after zeroing */
|
||||
SET_ERROR_AFF_ROWS(conn);
|
||||
|
||||
conn->last_query_type = QUERY_SELECT;
|
||||
CONN_SET_STATE(conn, CONN_FETCHING_DATA);
|
||||
/* PS has already allocated it */
|
||||
|
Loading…
Reference in New Issue
Block a user