mirror of
https://github.com/php/php-src.git
synced 2025-08-18 23:18:56 +02:00

PHP requires integer typehints to be written "int" and does not allow "integer" as an alias. This changes type error messages to match the actual type name and avoids confusing messages like "must be of the type integer, integer given".
193 lines
No EOL
5.9 KiB
PHP
193 lines
No EOL
5.9 KiB
PHP
--TEST--
|
|
Interface of the class mysqli_result
|
|
--SKIPIF--
|
|
<?php
|
|
require_once('skipif.inc');
|
|
require_once('skipifemb.inc');
|
|
require_once('skipifconnectfailure.inc');
|
|
?>
|
|
--FILE--
|
|
<?php
|
|
require('connect.inc');
|
|
require('table.inc');
|
|
|
|
$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket);
|
|
$mysqli_result = $mysqli->query('SELECT * FROM test');
|
|
$row = $mysqli_result->fetch_row();
|
|
|
|
$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
|
|
$res = mysqli_query($link, 'SELECT * FROM test');
|
|
assert(mysqli_fetch_row($res) === $row);
|
|
|
|
printf("Parent class:\n");
|
|
var_dump(get_parent_class($mysqli_result));
|
|
|
|
printf("\nMethods:\n");
|
|
$methods = get_class_methods($mysqli_result);
|
|
$expected_methods = array(
|
|
'__construct' => true,
|
|
'close' => true,
|
|
'data_seek' => true,
|
|
'fetch_array' => true,
|
|
'fetch_assoc' => true,
|
|
'fetch_field' => true,
|
|
'fetch_field_direct' => true,
|
|
'fetch_fields' => true,
|
|
'fetch_object' => true,
|
|
'fetch_row' => true,
|
|
'field_seek' => true,
|
|
'free' => true,
|
|
'free_result' => true,
|
|
);
|
|
if ($IS_MYSQLND)
|
|
$expected_methods['fetch_all'] = true;
|
|
|
|
foreach ($methods as $k => $method) {
|
|
if (isset($expected_methods[$method])) {
|
|
unset($expected_methods[$method]);
|
|
unset($methods[$k]);
|
|
}
|
|
if ($method == 'mysqli_result') {
|
|
// get_class_method reports different constructor names
|
|
unset($expected_methods['__construct']);
|
|
unset($methods[$k]);
|
|
}
|
|
}
|
|
|
|
if (!empty($expected_methods)) {
|
|
printf("Dumping list of missing methods.\n");
|
|
var_dump($expected_methods);
|
|
}
|
|
if (!empty($methods)) {
|
|
printf("Dumping list of unexpected methods.\n");
|
|
var_dump($methods);
|
|
}
|
|
if (empty($expected_methods) && empty($methods))
|
|
printf("ok\n");
|
|
|
|
|
|
printf("\nClass variables:\n");
|
|
$variables = array_keys(get_class_vars(get_class($mysqli_result)));
|
|
sort($variables);
|
|
foreach ($variables as $k => $var)
|
|
printf("%s\n", $var);
|
|
|
|
printf("\nObject variables:\n");
|
|
$variables = array_keys(get_object_vars($mysqli_result));
|
|
foreach ($variables as $k => $var)
|
|
printf("%s\n", $var);
|
|
|
|
printf("\nMagic, magic properties:\n");
|
|
|
|
assert(($tmp = mysqli_field_tell($res)) === $mysqli_result->current_field);
|
|
printf("mysqli_result->current_field = '%s'/%s ('%s'/%s)\n",
|
|
$mysqli_result->current_field, gettype($mysqli_result->current_field),
|
|
$tmp, gettype($tmp));
|
|
|
|
assert(($tmp = mysqli_field_count($link)) === $mysqli_result->field_count);
|
|
printf("mysqli_result->field_count = '%s'/%s ('%s'/%s)\n",
|
|
$mysqli_result->field_count, gettype($mysqli_result->field_count),
|
|
$tmp, gettype($tmp));
|
|
|
|
assert(($tmp = mysqli_fetch_lengths($res)) === $mysqli_result->lengths);
|
|
printf("mysqli_result->lengths -> '%s'/%s ('%s'/%s)\n",
|
|
((is_array($mysqli_result->lengths)) ? implode(' ', $mysqli_result->lengths) : 'n/a'),
|
|
gettype($mysqli_result->lengths),
|
|
((is_array($tmp)) ? implode(' ', $tmp) : 'n/a'),
|
|
gettype($tmp));
|
|
|
|
assert(($tmp = mysqli_num_rows($res)) === $mysqli_result->num_rows);
|
|
printf("mysqli_result->num_rows = '%s'/%s ('%s'/%s)\n",
|
|
$mysqli_result->num_rows, gettype($mysqli_result->num_rows),
|
|
$tmp, gettype($tmp));
|
|
|
|
assert(in_array($mysqli_result->type, array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT)));
|
|
printf("mysqli_result->type = '%s'/%s\n",
|
|
((MYSQLI_STORE_RESULT == $mysqli_result->type) ? 'store' : 'use'),
|
|
gettype($mysqli_result->type));
|
|
|
|
printf("\nAccess to undefined properties:\n");
|
|
printf("mysqli_result->unknown = '%s'\n", @$mysqli_result->unknown);
|
|
|
|
printf("\nConstructor:\n");
|
|
if (!is_object($res = new mysqli_result($link)))
|
|
printf("[001] Expecting object/mysqli_result got %s/%s\n", gettye($res), $res);
|
|
|
|
if (null !== ($tmp = @$res->num_rows))
|
|
printf("[002] Expecting NULL got %s/%s\n", gettype($tmp), $tmp);
|
|
|
|
if (!mysqli_query($link, "SELECT id FROM test ORDER BY id"))
|
|
printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
|
|
if (!is_object($res = new mysqli_result($link)))
|
|
printf("[004] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
|
|
if (!is_object($res = new mysqli_result($link, MYSQLI_STORE_RESULT)))
|
|
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
|
|
if (!is_object($res = new mysqli_result($link, MYSQLI_USE_RESULT)))
|
|
printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
|
|
if (!is_object($res = new mysqli_result($link, 'invalid')))
|
|
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
|
|
$valid = array(MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT);
|
|
do {
|
|
$mode = mt_rand(-1000, 1000);
|
|
} while (in_array($mode, $valid));
|
|
|
|
if ($TEST_EXPERIMENTAL) {
|
|
ob_start();
|
|
if (!is_object($res = new mysqli_result($link, $mode)))
|
|
printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
$content = ob_get_contents();
|
|
ob_end_clean();
|
|
if (!stristr($content, 'Invalid value for resultmode'))
|
|
printf("[009] Expecting warning because of invalid resultmode\n");
|
|
}
|
|
|
|
if (!is_object($res = new mysqli_result('foo')))
|
|
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
|
|
if (!is_object($res = @new mysqli_result($link, MYSQLI_STORE_RESULT, 1)))
|
|
printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
|
|
|
print "done!";
|
|
?>
|
|
--EXPECTF--
|
|
Parent class:
|
|
bool(false)
|
|
|
|
Methods:
|
|
ok
|
|
|
|
Class variables:
|
|
current_field
|
|
field_count
|
|
lengths
|
|
num_rows
|
|
type
|
|
|
|
Object variables:
|
|
current_field
|
|
field_count
|
|
lengths
|
|
num_rows
|
|
type
|
|
|
|
Magic, magic properties:
|
|
mysqli_result->current_field = '0'/integer ('0'/integer)
|
|
mysqli_result->field_count = '2'/integer ('2'/integer)
|
|
mysqli_result->lengths -> '1 1'/array ('1 1'/array)
|
|
mysqli_result->num_rows = '6'/integer ('6'/integer)
|
|
mysqli_result->type = 'store'/integer
|
|
|
|
Access to undefined properties:
|
|
mysqli_result->unknown = ''
|
|
|
|
Constructor:
|
|
|
|
Warning: mysqli_result::__construct() expects parameter 2 to be int, string given in %s on line %d
|
|
|
|
Warning: mysqli_result::__construct() expects parameter 1 to be mysqli, string given in %s on line %d
|
|
done!
|