From fc13e57d0f5c18c4d0caf1e97ce9e91c2ab8c7e0 Mon Sep 17 00:00:00 2001 From: Ulf Wendel Date: Wed, 10 Oct 2007 10:51:34 +0000 Subject: [PATCH] More changes = synching HEAD with 5_3 --- ext/mysqli/tests/mysqli_constants.phpt | 7 +- .../tests/mysqli_get_connection_stats.phpt | 13 ++- ext/mysqli/tests/mysqli_options.phpt | 6 +- ext/mysqli/tests/mysqli_phpinfo.phpt | 7 +- ext/mysqli/tests/mysqli_real_connect.phpt | 44 ++++++++-- ext/mysqli/tests/mysqli_report.phpt | 66 ++++++++++++-- ext/mysqli/tests/mysqli_set_charset.phpt | 50 ++++++++--- .../mysqli_set_local_infile_default.phpt | 12 ++- .../mysqli_set_local_infile_handler.phpt | 87 +++++++++++++++++-- ...et_local_infile_handler_bad_character.phpt | 22 ++++- ..._local_infile_handler_buffer_overflow.phpt | 24 ++++- ...i_set_local_infile_handler_close_link.phpt | 22 ++++- ...li_set_local_infile_handler_closefile.phpt | 22 ++++- ...li_set_local_infile_handler_kill_link.phpt | 23 ++++- ...set_local_infile_handler_negative_len.phpt | 24 ++++- ..._set_local_infile_handler_nested_call.phpt | 22 ++++- ...li_set_local_infile_handler_new_query.phpt | 22 ++++- ...qli_set_local_infile_handler_nofileop.phpt | 22 ++++- ...t_local_infile_handler_replace_buffer.phpt | 22 ++++- ...li_set_local_infile_handler_short_len.phpt | 22 ++++- ...i_set_local_infile_handler_unregister.phpt | 30 +++++-- ext/mysqli/tests/mysqli_stmt_attr_set.phpt | 34 +++++--- ext/mysqli/tests/mysqli_stmt_bind_param.phpt | 29 ++++++- ext/mysqli/tests/mysqli_stmt_bind_result.phpt | 11 +++ .../tests/mysqli_stmt_bind_result_bit.phpt | 14 +-- .../tests/mysqli_stmt_get_warnings.phpt | 6 +- ext/mysqli/tests/mysqli_stmt_init.phpt | 2 + .../tests/mysqli_stmt_send_long_data.phpt | 2 - 28 files changed, 564 insertions(+), 103 deletions(-) diff --git a/ext/mysqli/tests/mysqli_constants.phpt b/ext/mysqli/tests/mysqli_constants.phpt index 702b342a9d..a3d60a5da7 100644 --- a/ext/mysqli/tests/mysqli_constants.phpt +++ b/ext/mysqli/tests/mysqli_constants.phpt @@ -82,11 +82,14 @@ require_once('skipifconnectfailure.inc'); ); /* depends on the build - experimental */ - if ($IS_MYSQLND && defined('MYSQLI_OPT_INT_AND_YEARS_AS_INT')) + if ($IS_MYSQLND && defined('MYSQLI_OPT_INT_AND_YEARS_AS_INT')) { $expected_constants['MYSQLI_OPT_INT_AND_YEARS_AS_INT'] = true; + } if ($IS_MYSQLND) { $version = 50007 + 1; + $expected_constants['MYSQLI_OPT_NET_CMD_BUFFER_SIZE'] = true; + $expected_constants['MYSQLI_OPT_NET_READ_BUFFER_SIZE'] = true; } else { $version = mysqli_get_client_version(); } @@ -159,4 +162,4 @@ require_once('skipifconnectfailure.inc'); print "done!"; ?> --EXPECTF-- -done! \ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_get_connection_stats.phpt b/ext/mysqli/tests/mysqli_get_connection_stats.phpt index 65a3712322..ba71cd649a 100644 --- a/ext/mysqli/tests/mysqli_get_connection_stats.phpt +++ b/ext/mysqli/tests/mysqli_get_connection_stats.phpt @@ -27,6 +27,17 @@ if (!function_exists('mysqli_get_connection_stats')) { if (!is_array($info2 = mysqli_get_client_stats()) || empty($info2)) printf("[004] Expecting array/any_non_empty, got %s/%s\n", gettype($info2), $info2); + foreach ($info as $k => &$v) { + if (strpos($k, "mem_") === 0) { + $v = 0; + } + } + foreach ($info2 as $k => &$v) { + if (strpos($k, "mem_") === 0) { + $v = 0; + } + } + if ($info !== $info2) { printf("[005] The hashes should be identical\n"); var_dump($info); @@ -52,4 +63,4 @@ if (!function_exists('mysqli_get_connection_stats')) { print "done!"; ?> --EXPECTF-- -done! \ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_options.phpt b/ext/mysqli/tests/mysqli_options.phpt index 7539acb9f7..1bfa5faa3f 100644 --- a/ext/mysqli/tests/mysqli_options.phpt +++ b/ext/mysqli/tests/mysqli_options.phpt @@ -16,6 +16,10 @@ require_once('skipifconnectfailure.inc'); MYSQLI_OPT_LOCAL_INFILE, MYSQLI_INIT_COMMAND, MYSQLI_SET_CHARSET_NAME); + if ($IS_MYSQLND && defined('MYSQLI_OPT_NET_CMD_BUFFER_SIZE')) + $valid_options[] = constant('MYSQLI_OPT_NET_CMD_BUFFER_SIZE'); + if ($IS_MYSQLND && defined('MYSQLI_OPT_NET_READ_BUFFER_SIZE')) + $valid_options[] = constant('MYSQLI_OPT_NET_READ_BUFFER_SIZE'); if ($IS_MYSQLND && defined('MYSQLI_OPT_INT_AND_YEARS_AS_INT')) $valid_options[] = constant('MYSQLI_OPT_INT_AND_YEARS_AS_INT'); if (defined('MYSQLI_OPT_NUMERIC_AND_DATETIME_AS_UNICODE')) @@ -108,4 +112,4 @@ NULL Warning: mysqli_options(): Couldn't fetch mysqli in %s line %d %s(16) "SOME_RANDOM_FLAG" NULL -done! \ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_phpinfo.phpt b/ext/mysqli/tests/mysqli_phpinfo.phpt index f81c33c7b8..14fdfcd650 100644 --- a/ext/mysqli/tests/mysqli_phpinfo.phpt +++ b/ext/mysqli/tests/mysqli_phpinfo.phpt @@ -1,9 +1,9 @@ --TEST-- phpinfo() mysqli section --SKIPIF-- - --FILE-- @@ -59,7 +59,8 @@ require_once('skipifconnectfailure.inc'); 'implicit_free_result', 'explicit_stmt_close', 'implicit_stmt_close', 'put_hits', 'put_misses', 'get_hits', 'get_misses', 'size', 'free_items', 'references', 'mysqli.cache_size', - 'mysql.allow_local_infile' + 'mysqli.allow_local_infile', + 'mysqli.allow_persistent', 'mysqli.max_persistent' ); foreach ($expected as $k => $entry) if (!stristr($phpinfo, $entry)) diff --git a/ext/mysqli/tests/mysqli_real_connect.phpt b/ext/mysqli/tests/mysqli_real_connect.phpt index 3b5b30ae4b..e2050348cf 100644 --- a/ext/mysqli/tests/mysqli_real_connect.phpt +++ b/ext/mysqli/tests/mysqli_real_connect.phpt @@ -1,16 +1,14 @@ --TEST-- mysqli_real_connect() --SKIPIF-- - ---INI-- -open_basedir=. --FILE-- num_rows); + mysqli_next_result($link); + $res = mysqli_store_result($link); + var_dump($res->num_rows); + } + mysqli_close($link); if (!$link = mysqli_init()) @@ -133,8 +137,34 @@ open_basedir=. mysqli_close($link); + if ($IS_MYSQLND) { + ini_set('mysqli.default_host', 'p:' . $host); + $link = mysqli_init(); + if (!@mysqli_real_connect($link)) { + printf("[022] Usage of mysqli.default_host=p:%s (persistent) failed\n", $host) ; + } else { + if (!$res = mysqli_query($link, "SELECT 'mysqli.default_host (persistent)' AS 'testing'")) + printf("[023] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + $tmp = mysqli_fetch_assoc($res); + if ($tmp['testing'] !== 'mysqli.default_host (persistent)') { + printf("[024] Result looks strange - check manually, [%d] %s\n", + mysqli_errno($link), mysqli_error($link)); + var_dump($tmp); + } + mysqli_free_result($res); + mysqli_close($link); + } + + ini_set('mysqli.default_host', 'p:'); + $link = mysqli_init(); + if (@mysqli_real_sconnect($link)) { + printf("[025] Usage of mysqli.default_host=p: did not fail\n") ; + mysqli_close($link); + } + } + if (NULL !== ($tmp = mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))) - printf("[022] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); + printf("[026] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); print "done!"; ?> diff --git a/ext/mysqli/tests/mysqli_report.phpt b/ext/mysqli/tests/mysqli_report.phpt index 12d3ed991f..25e1050b6a 100644 --- a/ext/mysqli/tests/mysqli_report.phpt +++ b/ext/mysqli/tests/mysqli_report.phpt @@ -1,9 +1,9 @@ --TEST-- mysqli_report() --SKIPIF-- - --FILE-- @@ -188,11 +188,14 @@ require_once('skipifconnectfailure.inc'); */ $log_slow_queries = false; $log_queries_not_using_indexes = false; + mysqli_report(MYSQLI_REPORT_OFF); + mysqli_report(MYSQLI_REPORT_INDEX); if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) printf("[017] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); - if (!$res = mysqli_query($link, "SHOW VARIABLES LIKE 'log_slow_queries'")) + // this might cause a warning - no index used + if (!$res = @mysqli_query($link, "SHOW VARIABLES LIKE 'log_slow_queries'")) printf("[018] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!$row = mysqli_fetch_assoc($res)) @@ -201,7 +204,8 @@ require_once('skipifconnectfailure.inc'); $log_slow_query = ('ON' == $row['Value']); if (mysqli_get_server_version($link) >= 51011) { - if (!$res = mysqli_query($link, "SHOW VARIABLES LIKE 'log_queries_not_using_indexes'")) + // this might cause a warning - no index used + if (!$res = @mysqli_query($link, "SHOW VARIABLES LIKE 'log_queries_not_using_indexes'")) printf("[020] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); if (!$row = mysqli_fetch_assoc($res)) @@ -216,16 +220,64 @@ require_once('skipifconnectfailure.inc'); printf("[022 - %d] [%d] %s\n", $i - 99, mysqli_errno($link), mysqli_error($link)); } + // this might cause a warning - no index used if (!$res = @mysqli_query($link, "SELECT id, label FROM test WHERE id = 1323")) printf("[023] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); mysqli_free_result($res); - - mysqli_report(MYSQLI_REPORT_OFF); - mysqli_report(MYSQLI_REPORT_INDEX); } } + // Maybe we've provoked an index message, maybe not. + // All we can do is make a few dummy calls to ensure that all codes gets executed which + // checks the flag. Functions to check: mysqli_query() - done above, + // mysqli_stmt_execute(), mysqli_prepare(), mysqli_real_query(), mysqli_store_result() + // mysqli_use_result(), mysqli_thread_safe(), mysqli_thread_id() + mysqli_report(MYSQLI_REPORT_OFF); + mysqli_close($link); + if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) + printf("[024] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()); + + if (!$stmt = mysqli_stmt_init($link)) + printf("[025] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + + if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test')) + printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + + if (!mysqli_stmt_execute($stmt)) + printf("[027] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + + mysqli_stmt_close($stmt); + + if (!mysqli_real_query($link, 'SELECT label, id FROM test')) + printf("[028] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + + if (!$res = mysqli_use_result($link)) + printf("[029] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + + mysqli_free_result($res); + + if (!mysqli_real_query($link, 'SELECT label, id FROM test')) + printf("[030] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + + if (!$res = mysqli_store_result($link)) + printf("[031] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + + mysqli_free_result($res); + + if (!$stmt = mysqli_prepare($link, 'SELECT id * 3 FROM test')) + printf("[032] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + else + mysqli_stmt_close($stmt); + + if (!mysqli_query($link, 'INSERT INTO test(id, label) VALUES (100, "z")', MYSQLI_USE_RESULT) || + !mysqli_query($link, 'DELETE FROM test WHERE id > 50', MYSQLI_USE_RESULT)) + printf("[033] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + + $tmp = mysqli_thread_safe($link); + $tmp = mysqli_thread_id($link); + + mysqli_close($link); print "done!"; ?> --EXPECTF-- diff --git a/ext/mysqli/tests/mysqli_set_charset.phpt b/ext/mysqli/tests/mysqli_set_charset.phpt index 5ceb5cf0f1..5e6584bba8 100644 --- a/ext/mysqli/tests/mysqli_set_charset.phpt +++ b/ext/mysqli/tests/mysqli_set_charset.phpt @@ -1,15 +1,50 @@ --TEST-- mysqli_set_charset() --SKIPIF-- - --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- + string(2) "97" + ["label"]=> + string(1) "x" +} +array(2) { + ["id"]=> + string(2) "98" + ["label"]=> + string(1) "y" +} +array(2) { + ["id"]=> + string(2) "99" + ["label"]=> + string(1) "z" +} +Callback set to 'callback_error' +Callback: 0 +[042] LOAD DATA failed, [2000] How to access this error? +done! +--UEXPECTF-- +Callback set to 'callback_simple' +Callback: 0 +Callback: 1 +Callback set to 'callback_fclose' +Callback: 0 +[022] LOAD DATA failed, [2000] File handle closed in handler +Callback set to 'callback_invalid_args' +Callback: 0 +Callback: 1 +[037] More results than expected! +array(2) { + [u"id"]=> + unicode(2) "97" + [u"label"]=> + unicode(1) "x" +} +array(2) { + [u"id"]=> + unicode(2) "98" + [u"label"]=> + unicode(1) "y" +} +array(2) { + [u"id"]=> + unicode(2) "99" + [u"label"]=> + unicode(1) "z" +} Callback set to 'callback_error' Callback: 0 - -Warning: mysqli_query(): How to access this error? in %s on line %d [042] LOAD DATA failed, [2000] How to access this error? -done! \ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_set_local_infile_handler_bad_character.phpt b/ext/mysqli/tests/mysqli_set_local_infile_handler_bad_character.phpt index 4bcf8d1baa..2ea5ceb0c3 100644 --- a/ext/mysqli/tests/mysqli_set_local_infile_handler_bad_character.phpt +++ b/ext/mysqli/tests/mysqli_set_local_infile_handler_bad_character.phpt @@ -1,9 +1,9 @@ --TEST-- mysqli_set_local_infile_handler() - random ASCII character including \0 --SKIPIF-- - +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- +--INI-- +mysqli.allow_local_infile=1 --FILE-- 50003) + if ((mysqli_get_client_version() > 50003) || $IS_MYSQLND) { $valid_attr[] = MYSQLI_STMT_ATTR_CURSOR_TYPE; + $valid_attr[] = MYSQLI_CURSOR_TYPE_NO_CURSOR; + $valid_attr[] = MYSQLI_CURSOR_TYPE_READ_ONLY; + $valid_attr[] = MYSQLI_CURSOR_TYPE_FOR_UPDATE; + $valid_attr[] = MYSQLI_CURSOR_TYPE_SCROLLABLE; + } + + if ((mysqli_get_client_version() > 50007) || $IS_MYSQLND) + $valid_attr[] = MYSQLI_STMT_ATTR_PREFETCH_ROWS; -/* prefetch isn't supported - if (mysqli_get_client_version() > 50007) - $valid_attr[] = MYSQLI_STMT_ATTR_PREFETCH_ROWS; -*/ - do { - $invalid_attr = mt_rand(-10000, 10000); - } while (in_array($invalid_attr, $valid_attr)); $stmt = mysqli_stmt_init($link); if (!is_null($tmp = @mysqli_stmt_attr_set($stmt, 0, 0))) printf("[005] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); $stmt->prepare("SELECT * FROM test"); - if (false !== ($tmp = @mysqli_stmt_attr_set($stmt, $invalid_attr, 0))) - printf("[006] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); + mt_srand(microtime(true)); + for ($i = -100; $i < 1000; $i++) { + if (in_array($i, $valid_attr)) + continue; + $invalid_attr = $i; + if (false !== ($tmp = @mysqli_stmt_attr_set($stmt, $invalid_attr, 0))) + printf("[006a] Expecting boolean/false for attribute %d, got %s/%s\n", $invalid_attr, gettype($tmp), $tmp); + } + for ($i = 0; $i < 10; $i++) { + do { + $invalid_attr = mt_rand(-1 * PHP_INT_MAX + 1, PHP_INT_MAX); + } while (in_array($invalid_attr, $valid_attr)); + if (false !== ($tmp = @mysqli_stmt_attr_set($stmt, $invalid_attr, 0))) + printf("[006b] Expecting boolean/false for attribute %d, got %s/%s\n", $invalid_attr, gettype($tmp), $tmp); + } $stmt->close(); // diff --git a/ext/mysqli/tests/mysqli_stmt_bind_param.phpt b/ext/mysqli/tests/mysqli_stmt_bind_param.phpt index 0569739102..0b39a1b6d6 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_param.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_param.phpt @@ -44,6 +44,9 @@ require_once('skipifconnectfailure.inc'); libmysql gives a less descriptive error message but mysqlnd, we did not unify the error messages but ignore this slight difference silently */ + if (!false === ($tmp = @mysqli_stmt_bind_param($stmt, " ", $tmp))) + printf("[003d] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); + if (!false === ($tmp = @mysqli_stmt_bind_param($stmt, "", $id, $label))) printf("[003a] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp); @@ -347,6 +350,30 @@ require_once('skipifconnectfailure.inc'); } mysqli_free_result($res); + $value_list = array(array('id' => 101, 'label' => 'a'), array('id' => 102, 'label' => 'b')); + if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (?, ?)")) + printf("[2010] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + + foreach ($value_list as $k => $values) { + if (!mysqli_stmt_bind_param($stmt, 'is', $values['id'], $values['label'])) { + printf("[2011] bind_param() failed for id = %d, [%d] %s\n", + $values['id'], mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + continue; + } + if (!$stmt->execute()) + printf("[2012] [%d] execute() failed for id = %d, [%d] %s\n", + $values['id'], mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + + if (!$res = mysqli_query($link, sprintf("SELECT label FROM test WHERE id = %d", $values['id']))) + printf("[2013] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); + if (!$row = mysqli_fetch_assoc($res)) + printf("[2014] Cannot find row id = %d\n", $values['id']); + else if (isset($row['label']) && ($values['label'] != $row['label'])) + printf("[2015] Expecting label = %s, got label = %s\n", $values['label'], $row['label']); + + mysqli_free_result($res); + } + mysqli_stmt_close($stmt); mysqli_close($link); @@ -368,4 +395,4 @@ Warning: mysqli_stmt_bind_param(): Number of elements in type definition string Warning: mysqli_stmt_bind_param(): Undefined fieldtype a (parameter 3) in %s on line %d Warning: mysqli_stmt_bind_param(): Undefined fieldtype a (parameter 4) in %s on line %d -done! \ No newline at end of file +done! diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt index 99caeb8961..f5f08ac672 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result.phpt @@ -61,6 +61,7 @@ require_once('skipifconnectfailure.inc'); } mysqli_stmt_close($stmt); + function func_mysqli_stmt_bind_result($link, $engine, $bind_type, $sql_type, $bind_value, $offset, $type_hint = null) { if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) { @@ -294,6 +295,16 @@ require_once('skipifconnectfailure.inc'); if (!is_null($tmp = @mysqli_bind_result())) printf("[3000] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp); + $stmt = mysqli_stmt_init($link); + if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (1000, 'z')")) + printf("[3001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt)); + + $id = null; + if (false !== @mysqli_stmt_bind_result($stmt, $id)) + printf("[3002] Bind result should not be allowed"); + + mysqli_stmt_close($stmt); + mysqli_close($link); print "done!"; ?> diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt index b4f9fd9746..4934177182 100644 --- a/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt +++ b/ext/mysqli/tests/mysqli_stmt_bind_result_bit.phpt @@ -100,8 +100,7 @@ require_once('skipifconnectfailure.inc'); printf("[008 - %d] [%d] %s\n", $bits, mysqli_stmt_errno($stmt_ins), mysqli_stmt_error($stmt_ins)); break; } - - $sql = sprintf("SELECT id, BIN(bit_value) AS _bin, bit_value, bit_value + 0 AS _bit_value0, bit_null FROM test WHERE id = %d", $value); + $sql = sprintf("SELECT id, BIN(bit_value) AS _bin, bit_value, bit_value + 0 AS _bit_value0, bit_null FROM test WHERE id = %s", $value); if ((!mysqli_stmt_prepare($stmt_sel, $sql)) || (!mysqli_stmt_execute($stmt_sel))) { printf("[009 - %d] [%d] %s\n", $bits, mysqli_stmt_errno($stmt_sel), mysqli_stmt_error($stmt_sel)); @@ -114,13 +113,18 @@ require_once('skipifconnectfailure.inc'); break; } - if (!mysqli_stmt_fetch($stmt_sel)) { - printf("[011 - %d] [%d] %s\n", $bits, mysqli_stmt_errno($stmt_sel), mysqli_stmt_error($stmt_sel)); + if (!($ret = mysqli_stmt_fetch($stmt_sel))) { + printf("[011 - %d] mysqli_stmt_fetch() has failed for %d bits - ret = %s/%s, [%d] %s, [%d] %s\n", + $bits, $bits, + gettype($ret), $ret, + mysqli_stmt_errno($stmt_sel), mysqli_stmt_error($stmt_sel), + mysqli_errno($link_sel), mysqli_errno($link_sel) + ); break; } if (($value != $row['id']) || (($bin != $row['_bin']) && ($bin2 != $row['_bin']))) { -debug_zval_dump($row); + debug_zval_dump($row); printf("[012 - %d] Insert of %s in BIT(%d) column might have failed. id = %s, bin = %s (%s/%s)\n", $bits, $value, $bits, $row['id'], $row['_bin'], $bin, $bin2); break; diff --git a/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt b/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt index fb97f56431..9f8f824b95 100644 --- a/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt +++ b/ext/mysqli/tests/mysqli_stmt_get_warnings.phpt @@ -5,14 +5,10 @@ mysqli_stmt_get_warnings() - TODO require_once('skipif.inc'); require_once('skipifemb.inc'); require_once('skipifconnectfailure.inc'); -require_once('connect.inc'); - -if (!$TEST_EXPERIMENTAL) - die("skip - experimental (= unsupported) feature"); ?> --FILE--