php-src/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt
andrey 522595086b Remove support for local infile handler in mysqli from 5.5
This removes the following functions from the API:
mysqli_set_local_infile_default()
mysqli_set_local_infile_handler()

Using these functions is known to be lead to stability problems in
mysqli. It was only enabled when compiling against libmysql. mysqlnd
doesn't have this support for local infile. However, with mysqlnd it can
be emulated by using stream handlers like in:

$c->query("LOAD DATA LOCAL INFILE "http://example.com/import.csv" INTO ...")
All available protocols, as well as user implemented ones can be added.
2012-05-03 12:55:03 +02:00

313 lines
No EOL
10 KiB
PHP

--TEST--
Interface of the class mysqli
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
<?php
require('connect.inc');
$mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket);
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
printf("Parent class:\n");
var_dump(get_parent_class($mysqli));
printf("\nMethods:\n");
$methods = get_class_methods($mysqli);
$expected_methods = array(
'autocommit' => true,
'change_user' => true,
'character_set_name' => true,
'close' => true,
'commit' => true,
'connect' => true,
'dump_debug_info' => true,
'escape_string' => true,
'get_charset' => true,
'get_client_info' => true,
'get_server_info' => true,
'get_warnings' => true,
'init' => true,
'kill' => true,
'more_results' => true,
'multi_query' => true,
'mysqli' => true,
'next_result' => true,
'options' => true,
'ping' => true,
'prepare' => true,
'query' => true,
'real_connect' => true,
'real_escape_string' => true,
'real_query' => true,
'refresh' => true,
'rollback' => true,
'select_db' => true,
'set_charset' => true,
'set_opt' => true,
'ssl_set' => true,
'stat' => true,
'stmt_init' => true,
'store_result' => true,
'thread_safe' => true,
'use_result' => true,
);
if (version_compare(PHP_VERSION, '5.3.99', '<=')) {
$expected_methods['client_encoding'] = true;
}
if ($IS_MYSQLND) {
// mysqlnd only
/* $expected_methods['get_client_stats'] = true; */
$expected_methods['get_connection_stats'] = true;
$expected_methods['reap_async_query'] = true;
$expected_methods['poll'] = true;
}
/* we should add ruled when to expect them */
if (function_exists('mysqli_debug'))
$expected_methods['debug'] = true;
if (function_exists('ssl_set'))
$expected_methods['ssl_set'] = true;
foreach ($methods as $k => $method) {
if (isset($expected_methods[$method])) {
unset($methods[$k]);
unset($expected_methods[$method]);
}
}
if (!empty($methods)) {
printf("Dumping list of unexpected methods.\n");
var_dump($methods);
}
if (!empty($expected_methods)) {
printf("Dumping list of missing methods.\n");
var_dump($expected_methods);
}
if (empty($methods) && empty($expected_methods))
printf("ok\n");
printf("\nClass variables:\n");
$expected_class_variables = $expected_object_variables = array(
"affected_rows" => true,
"client_info" => true,
"client_version" => true,
"connect_errno" => true,
"connect_error" => true,
"errno" => true,
"error" => true,
"field_count" => true,
"host_info" => true,
"info" => true,
"insert_id" => true,
"protocol_version" => true,
"server_info" => true,
"server_version" => true,
"sqlstate" => true,
"stat" => true,
"thread_id" => true,
"warning_count" => true,
);
if (version_compare(PHP_VERSION, '5.3.99', '>')) {
$expected_class_variables["error_list"] = true;
$expected_object_variables["error_list"] = true;
}
$variables = get_class_vars(get_class($mysqli));
foreach ($variables as $var => $v) {
if (isset($expected_class_variables[$var])) {
unset($expected_class_variables[$var]);
unset($variables[$var]);
}
}
if (!empty($expected_class_variables)) {
printf("Dumping list of missing class variables\n");
var_dump($expected_class_variables);
}
if (!empty($variables)) {
printf("Dumping list of unexpected class variables\n");
var_dump($variables);
}
echo "ok\n";
printf("\nObject variables:\n");
$variables = get_object_vars($mysqli);
foreach ($variables as $var => $v) {
if (isset($expected_object_variables[$var])) {
unset($expected_object_variables[$var]);
unset($variables[$var]);
}
}
if (!empty($expected_object_variables)) {
printf("Dumping list of missing object variables\n");
var_dump($expected_object_variables);
}
if (!empty($variables)) {
printf("Dumping list of unexpected object variables\n");
var_dump($variables);
}
echo "ok\n";
printf("\nMagic, magic properties:\n");
assert(mysqli_affected_rows($link) === $mysqli->affected_rows);
printf("mysqli->affected_rows = '%s'/%s ('%s'/%s)\n",
$mysqli->affected_rows, gettype($mysqli->affected_rows),
mysqli_affected_rows($link), gettype(mysqli_affected_rows($link)));
assert(mysqli_get_client_info() === $mysqli->client_info);
printf("mysqli->client_info = '%s'/%s ('%s'/%s)\n",
$mysqli->client_info, gettype($mysqli->client_info),
mysqli_get_client_info(), gettype(mysqli_get_client_info()));
assert(mysqli_get_client_version() === $mysqli->client_version);
printf("mysqli->client_version = '%s'/%s ('%s'/%s)\n",
$mysqli->client_version, gettype($mysqli->client_version),
mysqli_get_client_version(), gettype(mysqli_get_client_version()));
assert(mysqli_errno($link) === $mysqli->errno);
printf("mysqli->errno = '%s'/%s ('%s'/%s)\n",
$mysqli->errno, gettype($mysqli->errno),
mysqli_errno($link), gettype(mysqli_errno($link)));
assert(mysqli_error($link) === $mysqli->error);
printf("mysqli->error = '%s'/%s ('%s'/%s)\n",
$mysqli->error, gettype($mysqli->error),
mysqli_error($link), gettype(mysqli_error($link)));
if (version_compare(PHP_VERSION, '5.3.99', '>')) {
assert(mysqli_error_list($link) === $mysqli->error_list);
assert(is_array($mysqli->error_list));
}
assert(mysqli_field_count($link) === $mysqli->field_count);
printf("mysqli->field_count = '%s'/%s ('%s'/%s)\n",
$mysqli->field_count, gettype($mysqli->field_count),
mysqli_field_count($link), gettype(mysqli_field_count($link)));
assert(mysqli_insert_id($link) === $mysqli->insert_id);
printf("mysqli->insert_id = '%s'/%s ('%s'/%s)\n",
$mysqli->insert_id, gettype($mysqli->insert_id),
mysqli_insert_id($link), gettype(mysqli_insert_id($link)));
assert(mysqli_sqlstate($link) === $mysqli->sqlstate);
printf("mysqli->sqlstate = '%s'/%s ('%s'/%s)\n",
$mysqli->sqlstate, gettype($mysqli->sqlstate),
mysqli_sqlstate($link), gettype(mysqli_sqlstate($link)));
assert(mysqli_stat($link) === $mysqli->stat);
printf("mysqli->stat = '%s'/%s ('%s'/%s)\n",
$mysqli->stat, gettype($mysqli->stat),
mysqli_stat($link), gettype(mysqli_stat($link)));
assert(mysqli_get_host_info($link) === $mysqli->host_info);
printf("mysqli->host_info = '%s'/%s ('%s'/%s)\n",
$mysqli->host_info, gettype($mysqli->host_info),
mysqli_get_host_info($link), gettype(mysqli_get_host_info($link)));
/* note that the data types are different */
assert(mysqli_info($link) == $mysqli->info);
printf("mysqli->info = '%s'/%s ('%s'/%s)\n",
$mysqli->info, gettype($mysqli->info),
mysqli_info($link), gettype(mysqli_info($link)));
assert(mysqli_thread_id($link) > $mysqli->thread_id);
assert(gettype($mysqli->thread_id) == gettype(mysqli_thread_id($link)));
printf("mysqli->thread_id = '%s'/%s ('%s'/%s)\n",
$mysqli->thread_id, gettype($mysqli->thread_id),
mysqli_thread_id($link), gettype(mysqli_thread_id($link)));
assert(mysqli_get_proto_info($link) === $mysqli->protocol_version);
printf("mysqli->protocol_version = '%s'/%s ('%s'/%s)\n",
$mysqli->protocol_version, gettype($mysqli->protocol_version),
mysqli_get_proto_info($link), gettype(mysqli_get_proto_info($link)));
assert(mysqli_get_server_info($link) === $mysqli->server_info);
printf("mysqli->server_info = '%s'/%s ('%s'/%s)\n",
$mysqli->server_info, gettype($mysqli->server_info),
mysqli_get_server_info($link), gettype(mysqli_get_server_info($link)));
assert(mysqli_get_server_version($link) === $mysqli->server_version);
printf("mysqli->server_version = '%s'/%s ('%s'/%s)\n",
$mysqli->server_version, gettype($mysqli->server_version),
mysqli_get_server_version($link), gettype(mysqli_get_server_version($link)));
assert(mysqli_warning_count($link) === $mysqli->warning_count);
printf("mysqli->warning_count = '%s'/%s ('%s'/%s)\n",
$mysqli->warning_count, gettype($mysqli->warning_count),
mysqli_warning_count($link), gettype(mysqli_warning_count($link)));
printf("\nAccess to undefined properties:\n");
printf("mysqli->unknown = '%s'\n", @$mysqli->unknown);
@$mysqli->unknown = 13;
printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
$unknown = 'friday';
@$mysqli->unknown = $unknown;
printf("setting mysqli->unknown, mysqli_unknown = '%s'\n", @$mysqli->unknown);
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
printf("\nAccess hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):\n");
assert(mysqli_connect_error() === $mysqli->connect_error);
printf("mysqli->connect_error = '%s'/%s ('%s'/%s)\n",
$mysqli->connect_error, gettype($mysqli->connect_error),
mysqli_connect_error(), gettype(mysqli_connect_error()));
assert(mysqli_connect_errno() === $mysqli->connect_errno);
printf("mysqli->connect_errno = '%s'/%s ('%s'/%s)\n",
$mysqli->connect_errno, gettype($mysqli->connect_errno),
mysqli_connect_errno(), gettype(mysqli_connect_errno()));
print "done!";
?>
--EXPECTF--
Parent class:
bool(false)
Methods:
ok
Class variables:
ok
Object variables:
ok
Magic, magic properties:
mysqli->affected_rows = '%s'/integer ('%s'/integer)
mysqli->client_info = '%s'/%unicode|string% ('%s'/%unicode|string%)
mysqli->client_version = '%d'/integer ('%d'/integer)
mysqli->errno = '0'/integer ('0'/integer)
mysqli->error = ''/%unicode|string% (''/%unicode|string%)
mysqli->field_count = '0'/integer ('0'/integer)
mysqli->insert_id = '0'/integer ('0'/integer)
mysqli->sqlstate = '00000'/%unicode|string% ('00000'/%unicode|string%)
mysqli->stat = 'Uptime: %d Threads: %d Questions: %d Slow queries: %d Opens: %d Flush tables: %d Open tables: %d Queries per second avg: %d.%d'/string ('Uptime: %d Threads: %d Questions: %d Slow queries: %d Opens: %d Flush tables: %d Open tables: %d Queries per second avg: %d.%d'/string)
mysqli->host_info = '%s'/%unicode|string% ('%s'/%unicode|string%)
mysqli->info = ''/NULL (''/%unicode|string%)
mysqli->thread_id = '%d'/integer ('%d'/integer)
mysqli->protocol_version = '%d'/integer ('%d'/integer)
mysqli->server_info = '%s'/%unicode|string% ('%s'/%unicode|string%)
mysqli->server_version = '%d'/integer ('%d'/integer)
mysqli->warning_count = '0'/integer ('0'/integer)
Access to undefined properties:
mysqli->unknown = ''
setting mysqli->unknown, mysqli_unknown = '13'
setting mysqli->unknown, mysqli_unknown = 'friday'
Access hidden properties for MYSLQI_STATUS_INITIALIZED (TODO documentation):
mysqli->connect_error = ''/NULL (''/NULL)
mysqli->connect_errno = '0'/integer ('0'/integer)
done!