);
/* 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();
}
print "done!";
?>
--EXPECTF--
-done!
\ No newline at end of file
+done!
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);
print "done!";
?>
--EXPECTF--
-done!
\ No newline at end of file
+done!
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'))
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!
--TEST--
phpinfo() mysqli section
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
'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))
--TEST--
mysqli_real_connect()
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
---INI--
-open_basedir=.
--FILE--
<?php
- include "connect.inc";
+ include("connect.inc");
$tmp = NULL;
$link = NULL;
if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, 65536))
printf("[016] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
- if (mysqli_query($link, "SELECT 1 AS a; SELECT 2 AS b"))
+ if ($res = mysqli_query($link, "SELECT 1 AS a; SELECT 2 AS b")) {
printf("[017] Should have failed. CLIENT_MULTI_STATEMENT should have been disabled.\n");
+ var_dump($res->num_rows);
+ mysqli_next_result($link);
+ $res = mysqli_store_result($link);
+ var_dump($res->num_rows);
+ }
+
mysqli_close($link);
if (!$link = mysqli_init())
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!";
?>
--TEST--
mysqli_report()
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
*/
$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))
$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))
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--
--TEST--
mysqli_set_charset()
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_charset'))
die("skip Function not available");
if (ini_get("unicode.semantics"))
die("skip: mysqli_set_charset() is disabled in unicode");
+
+require_once('connect.inc');
+if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket))
+ die(sprintf("skip Cannot connect, [%d] %s", mysqli_connect_errno(), mysqli_connect_error()));
+
+if (!($res = mysqli_query($link, 'SELECT version() AS server_version')) ||
+ !($tmp = mysqli_fetch_assoc($res))) {
+ mysqli_close($link);
+ die(sprintf("skip Cannot check server version, [%d] %s\n",
+ mysqli_errno($link), mysqli_error($link)));
+}
+mysqli_free_result($res);
+$version = explode('.', $tmp['server_version']);
+if (empty($version)) {
+ mysqli_close($link);
+ die(sprintf("skip Cannot check server version, based on '%s'",
+ $tmp['server_version']));
+}
+
+if ($version[0] <= 4 && $version[1] < 1) {
+ mysqli_close($link);
+ die(sprintf("skip Requires MySQL Server 4.1+\n"));
+}
+
+if ((($res = mysqli_query($link, 'SHOW CHARACTER SET LIKE "latin1"', MYSQLI_STORE_RESULT)) &&
+ (mysqli_num_rows($res) == 1)) ||
+ (($res = mysqli_query($link, 'SHOW CHARACTER SET LIKE "latin2"', MYSQLI_STORE_RESULT)) &&
+ (mysqli_num_rows($res) == 1))
+ ) {
+ // ok, required latin1 or latin2 are available
+ mysqli_close($link);
+} else {
+ die(sprintf("skip Requires character set latin1 or latin2\n"));
+ mysqli_close($link);
+}
?>
--FILE--
<?php
require('table.inc');
- if (!$res = mysqli_query($link, 'SELECT version() AS server_version'))
- printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
- $tmp = mysqli_fetch_assoc($res);
- mysqli_free_result($res);
- $version = explode('.', $tmp['server_version']);
- if (empty($version))
- printf("[005] Cannot determine server version, need MySQL Server 4.1+ for the test!\n");
-
- if ($version[0] <= 4 && $version[1] < 1)
- printf("[006] Need MySQL Server 4.1+ for the test!\n");
-
if (!$res = mysqli_query($link, 'SELECT @@character_set_connection AS charset, @@collation_connection AS collation'))
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
$tmp = mysqli_fetch_assoc($res);
--TEST--
mysqli_set_local_infile_default()
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
die("skip - function not available.");
require_once('connect.inc');
-if (!$TEST_EXPERIMENTAL)
- die("skip - experimental (= unsupported) feature");
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
if (!is_null($tmp = @mysqli_set_local_infile_default($link)))
printf("[002] Expecting NULL got %s/%s\n", gettype($tmp), $tmp);
+ $link = new mysqli();
+ if (!is_null($tmp = @mysqli_set_local_infile_default($link)))
+ printf("[002a] Expecting NULL got %s/%s\n", gettype($tmp), $tmp);
+
include("table.inc");
if (!is_null($tmp = @mysqli_set_local_infile_default($link, 'foo')))
--TEST--
mysqli_set_local_infile_handler()
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
-require_once('connect.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
die("skip - function not available.");
require_once('connect.inc');
-if (!$TEST_EXPERIMENTAL)
- die("skip - experimental (= unsupported) feature");
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
$expected = array();
try_handler(20, $link, $file, 'callback_fclose', $expected);
+ // FIXME - TODO - KLUDGE -
+ // IMHO this is wrong. ext/mysqli should bail as the function signature
+ // is not complete. That's a BC break, OK, but it makes perfectly sense.
$expected = array();
try_handler(30, $link, $file, 'callback_invalid_args', $expected);
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'
-Should bail!
+Callback: 0
+Callback: 1
+[037] More results than expected!
+array(2) {
+ ["id"]=>
+ 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!
--TEST--
mysqli_set_local_infile_handler() - random ASCII character including \0
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--TEST--
mysqli_set_local_infile_handler() - buffer overflow
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
die("skip - function not available.");
-include_once('connect.inc');
+require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--TEST--
mysqli_set_local_infile_handler() - close database link
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
include "connect.inc";
--TEST--
mysqli_set_local_infile_handler() - do not use the file pointer
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
include "connect.inc";
--TEST--
mysqli_set_local_infile_handler() - kill database link
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
die("skip - function not available.");
require_once('connect.inc');
-if (!$TEST_EXPERIMENTAL)
- die("skip - experimental (= unsupported) feature");
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
include "connect.inc";
--TEST--
mysqli_set_local_infile_handler() - negative return value/buflen to indicate an error
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--EXPECTF--
Callback set to 'callback_negative_len'
Callback: 0
-
-Warning: mysqli_query(): negative length means error in %s on line %d
[022] LOAD DATA failed, [2000] negative length means error
done!
\ No newline at end of file
--TEST--
mysqli_set_local_infile_handler() - nested calls
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--TEST--
mysqli_set_local_infile_handler() - run new query on db link
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--TEST--
mysqli_set_local_infile_handler() - do not use the file pointer
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--TEST--
mysqli_set_local_infile_handler() - replace buffer pointer
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--TEST--
mysqli_set_local_infile_handler() - report shorter buffer
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
require_once('connect.inc');
if (!$TEST_EXPERIMENTAL)
die("skip - experimental (= unsupported) feature");
+
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--TEST--
mysqli_set_local_infile_handler() - do not use the file pointer
--SKIPIF--
-<?php
+<?php
require_once('skipif.inc');
-require_once('skipifemb.inc');
+require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
if (!function_exists('mysqli_set_local_infile_handler'))
die("skip - function not available.");
require_once('connect.inc');
-if (!$TEST_EXPERIMENTAL)
- die("skip - experimental (= unsupported) feature");
+if (!$link = mysqli_connect($host, $user, $passwb, $db, $port, $socket))
+ die("skip Cannot connect to MySQL");
+
+if (!$res = mysqli_query($link, 'SHOW VARIABLES LIKE "local_infile"')) {
+ mysqli_close($link);
+ die("skip Cannot check if Server variable 'local_infile' is set to 'ON'");
+}
+
+$row = mysqli_fetch_assoc($res);
+mysqli_free_result($res);
+mysqli_close($link);
+
+if ('ON' != $row['Value'])
+ die(sprintf("skip Server variable 'local_infile' seems not set to 'ON', found '%s'",
+ $row['Value']));
?>
+--INI--
+mysqli.allow_local_infile=1
--FILE--
<?php
require_once('connect.inc');
--EXPECTF--
Callback set to 'callback_unregister'
Callback: 0
-[022] LOAD DATA failed, [2000] Can't execute load data local init callback function
-done!
\ No newline at end of file
+
+Warning: mysqli_query(): File handle closed in %s on line %d
+[022] LOAD DATA failed, [2000] File handle closed
+[024/0] [0] ''
+done!
require('table.inc');
$valid_attr = array(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
- if (mysqli_get_client_version() > 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();
//
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);
}
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);
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!
}
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")) {
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!";
?>
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));
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;
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--
<?php
- include "connect.inc";
+ require_once("connect.inc");
$tmp = NULL;
$link = NULL;
in %s on line %d
Warning: mysqli_stmt_init() expects parameter 1 to be mysqli, object given in %s on line %d
+
+Warning: mysqli_stmt_init(): Couldn't fetch mysqli in %s on line %d
done!
\ No newline at end of file
--EXPECTF--
Warning: mysqli_stmt_send_long_data(): Invalid parameter number in %s on line %d
-Warning: mysqli_stmt_send_long_data(): Invalid parameter number in %s on line %d
-
Warning: mysqli_stmt_send_long_data(): Invalid parameter number in %s on line %d
done!
\ No newline at end of file