mirror of
https://github.com/php/php-src.git
synced 2024-11-28 20:34:29 +08:00
MFH
Added: mysqli_fetch_assoc_zerofill.phpt checks for UNSIGNED ZEROFILL mysqli_stmt_bind_result_zerofill.phpt checks for UNSIGNED ZEROFILL mysqli_stmt_bind_param_call_user_func.phpt Needs to be refined once http://bugs.php.net/bug.php?id=43568 has been closed and a decision has been made on call_user_func_array(). There seems to be a BC break between 5_2 -> 5_3 . Johannes has an eye on it Modified: mysqli_change_user_insert_id.phpt skip test for buggy MySQL Server versions mysqli_insert_id.phpt added additional checks
This commit is contained in:
parent
0b26f6fe7e
commit
f316766afe
@ -5,6 +5,15 @@ mysqli_change_user() - LAST_INSERT_ID()
|
|||||||
require_once('skipif.inc');
|
require_once('skipif.inc');
|
||||||
require_once('skipifemb.inc');
|
require_once('skipifemb.inc');
|
||||||
require_once('skipifconnectfailure.inc');
|
require_once('skipifconnectfailure.inc');
|
||||||
|
require_once('connect.inc');
|
||||||
|
if (!$IS_MYSQLND) {
|
||||||
|
if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket))
|
||||||
|
die("skip Can't test server version, might hit known bug http://bugs.mysql.com/bug.php?id=30472");
|
||||||
|
if (mysqli_get_client_version($link) < 50123)
|
||||||
|
/* TODO - check wich version got the patch */
|
||||||
|
die(sprintf("skip libmysql %s should have bug http://bugs.mysql.com/bug.php?id=30472", mysqli_get_client_version($link)));
|
||||||
|
mysqli_close($link);
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
--FILE--
|
--FILE--
|
||||||
<?php
|
<?php
|
||||||
|
74
ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt
Normal file
74
ext/mysqli/tests/mysqli_fetch_assoc_zerofill.phpt
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
--TEST--
|
||||||
|
mysqli_fetch_assoc() - ZEROFILL
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
require_once('skipif.inc');
|
||||||
|
require_once('skipifemb.inc');
|
||||||
|
require_once('skipifconnectfailure.inc');
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
require_once('connect.inc');
|
||||||
|
require_once('table.inc');
|
||||||
|
|
||||||
|
function zerofill($offset, $link, $datatype, $insert = 1) {
|
||||||
|
|
||||||
|
mysqli_query($link, 'ALTER TABLE test DROP zero');
|
||||||
|
$sql = sprintf('ALTER TABLE test ADD zero %s UNSIGNED ZEROFILL', $datatype);
|
||||||
|
if (!mysqli_query($link, $sql)) {
|
||||||
|
// no worries - server might not support it
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mysqli_query($link, sprintf('UPDATE test SET zero = %s', $insert))) {
|
||||||
|
printf("[%03d] UPDATE failed, [%d] %s\n",
|
||||||
|
$offset, mysqli_errno($link), mysqli_error($link));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!($res = mysqli_query($link, 'SELECT zero FROM test LIMIT 1'))) {
|
||||||
|
printf("[%03d] SELECT failed, [%d] %s\n",
|
||||||
|
$offset, mysqli_errno($link), mysqli_error($link));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$row = mysqli_fetch_assoc($res);
|
||||||
|
$meta = mysqli_fetch_fields($res);
|
||||||
|
mysqli_free_result($res);
|
||||||
|
$meta = $meta[0];
|
||||||
|
$length = $meta->length;
|
||||||
|
if ($length > strlen($insert)) {
|
||||||
|
|
||||||
|
$expected = str_repeat('0', $length - strlen($insert));
|
||||||
|
$expected .= $insert;
|
||||||
|
if ($expected !== $row['zero']) {
|
||||||
|
printf("[%03d] Expecting '%s' got '%s'\n", $offset, $expected, $row['zero']);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if ($length <= 1) {
|
||||||
|
printf("[%03d] Length reported is too small to run test\n", $offset);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
zerofill(2, $link, 'TINYINT');
|
||||||
|
zerofill(3, $link, 'SMALLINT');
|
||||||
|
zerofill(4, $link, 'MEDIUMINT');
|
||||||
|
zerofill(5, $link, 'INT');
|
||||||
|
zerofill(6, $link, 'INTEGER');
|
||||||
|
zerofill(7, $link, 'BIGINT');
|
||||||
|
zerofill(8, $link, 'FLOAT');
|
||||||
|
zerofill(9, $link, 'DOUBLE');
|
||||||
|
zerofill(10, $link, 'DOUBLE PRECISION');
|
||||||
|
zerofill(11, $link, 'DECIMAL');
|
||||||
|
zerofill(12, $link, 'DEC');
|
||||||
|
|
||||||
|
mysqli_close($link);
|
||||||
|
|
||||||
|
print "done!";
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
done!
|
@ -1,9 +1,9 @@
|
|||||||
--TEST--
|
--TEST--
|
||||||
mysqli_insert_id()
|
mysqli_insert_id()
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php
|
<?php
|
||||||
require_once('skipif.inc');
|
require_once('skipif.inc');
|
||||||
require_once('skipifemb.inc');
|
require_once('skipifemb.inc');
|
||||||
require_once('skipifconnectfailure.inc');
|
require_once('skipifconnectfailure.inc');
|
||||||
?>
|
?>
|
||||||
--FILE--
|
--FILE--
|
||||||
@ -104,7 +104,7 @@ require_once('skipifconnectfailure.inc');
|
|||||||
mysqli_free_result($res);
|
mysqli_free_result($res);
|
||||||
|
|
||||||
if ($next_id != $row['last_id']) {
|
if ($next_id != $row['last_id']) {
|
||||||
printf("[018] Something is wrong, check manually. Expecting %s got %s.\n",
|
printf("[019] Something is wrong, check manually. Expecting %s got %s.\n",
|
||||||
$next_id, $row['last_id']);
|
$next_id, $row['last_id']);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -112,6 +112,18 @@ require_once('skipifconnectfailure.inc');
|
|||||||
mysqli_query($link, "UNLOCK TABLE test");
|
mysqli_query($link, "UNLOCK TABLE test");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$res = mysqli_query($link, "INSERT INTO test(id, label) VALUES (1000, 'a')")) {
|
||||||
|
printf("[020] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
}
|
||||||
|
if (1000 !== ($tmp = mysqli_insert_id($link)))
|
||||||
|
printf("[021] Expecting int/1000, got %s/%s\n", gettype($tmp), $tmp);
|
||||||
|
|
||||||
|
if (!$res = mysqli_query($link, "INSERT INTO test(label) VALUES ('b'), ('c')")) {
|
||||||
|
printf("[022] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
}
|
||||||
|
if (1000 >= ($tmp = mysqli_insert_id($link)))
|
||||||
|
printf("[023] Expecting int/>1000, got %s/%s\n", gettype($tmp), $tmp);
|
||||||
|
|
||||||
mysqli_close($link);
|
mysqli_close($link);
|
||||||
|
|
||||||
var_dump(mysqli_insert_id($link));
|
var_dump(mysqli_insert_id($link));
|
||||||
|
398
ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt
Normal file
398
ext/mysqli/tests/mysqli_stmt_bind_param_call_user_func.phpt
Normal file
@ -0,0 +1,398 @@
|
|||||||
|
--TEST--
|
||||||
|
mysqli_stmt_bind_param used with call_user_func_array() (see also bug #43568)
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
require_once('skipif.inc');
|
||||||
|
require_once('skipifemb.inc');
|
||||||
|
require_once('skipifconnectfailure.inc');
|
||||||
|
|
||||||
|
// TODO remove once a decision has been made on call_user_func_array()
|
||||||
|
if (version_compare(PHP_VERSION, '5.3.0-dev') == -1)
|
||||||
|
die("skip needs PHP 5.3.0-dev+, see http://bugs.php.net/bug.php?id=43568");
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
require('connect.inc');
|
||||||
|
require('table.inc');
|
||||||
|
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[002] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = 1;
|
||||||
|
if (!mysqli_stmt_bind_param($stmt, 'i', $id) ||
|
||||||
|
!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[003] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[004] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Regular, procedural, using variables\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[005] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$types = 'i';
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => &$stmt,
|
||||||
|
1 => &$types,
|
||||||
|
2 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array('mysqli_stmt_bind_param', $params))
|
||||||
|
printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[009] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, procedural, using references for everything\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$types = 'i';
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => &$types,
|
||||||
|
1 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array(array($stmt, 'bind_param'), $params))
|
||||||
|
printf("[012] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[014] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, object oriented, using references for everything\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[015] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[016] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$types = 'i';
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => $types,
|
||||||
|
1 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array(array($stmt, 'bind_param'), $params))
|
||||||
|
printf("[017] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[018] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[019] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, object oriented, using variable for types. using references for bound parameter\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[020] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[021] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => 'i',
|
||||||
|
1 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array(array($stmt, 'bind_param'), $params))
|
||||||
|
printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[023] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[024] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, object oriented, using constant for types. using references for bound parameter\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
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 WHERE id = ?'))
|
||||||
|
printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$types = 'i';
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => &$stmt,
|
||||||
|
1 => $types,
|
||||||
|
2 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array('mysqli_stmt_bind_param', $params))
|
||||||
|
printf("[027] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[029] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, procedural, using references for everything but using variable for types\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
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 WHERE id = ?'))
|
||||||
|
printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$types = 'i';
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => $stmt,
|
||||||
|
1 => $types,
|
||||||
|
2 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array('mysqli_stmt_bind_param', $params))
|
||||||
|
printf("[027] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[029] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, procedural, using references for bound parameter, using variables for resource and types\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[030] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[031] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$types = 'i';
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => $stmt,
|
||||||
|
1 => $types,
|
||||||
|
2 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array('mysqli_stmt_bind_param', $params))
|
||||||
|
printf("[032] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, procedural, using references for bound parameter, using variables for resource and types\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[035] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[036] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => $stmt,
|
||||||
|
1 => 'i',
|
||||||
|
2 => &$id
|
||||||
|
);
|
||||||
|
if (!call_user_func_array('mysqli_stmt_bind_param', $params))
|
||||||
|
printf("[037] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[038] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[039] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[040] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[041] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = 1;
|
||||||
|
if (!call_user_func_array('mysqli_stmt_bind_param', array($stmt, 'i', &$id)))
|
||||||
|
printf("[042] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[043] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = $label = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $id, $label) ||
|
||||||
|
(true !== mysqli_stmt_fetch($stmt)))
|
||||||
|
printf("[044] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
print "Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types, array\n";
|
||||||
|
var_dump($id);
|
||||||
|
var_dump($label);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Any of those shall fail - see also bugs.php.net/43568
|
||||||
|
//
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[045] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[046] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => 'i',
|
||||||
|
1 => $id
|
||||||
|
);
|
||||||
|
if (call_user_func_array(array($stmt, 'bind_param'), $params))
|
||||||
|
printf("[047] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[048] [%d] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)\n", mysqli_stmt_errno($stmt));
|
||||||
|
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
if (!$stmt = mysqli_stmt_init($link))
|
||||||
|
printf("[049] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_prepare($stmt, 'SELECT id, label FROM test WHERE id = ?'))
|
||||||
|
printf("[050] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
$types = 'i';
|
||||||
|
$id = 1;
|
||||||
|
$params = array(
|
||||||
|
0 => $stmt,
|
||||||
|
1 => 'i',
|
||||||
|
2 => $id
|
||||||
|
);
|
||||||
|
if (call_user_func_array('mysqli_stmt_bind_param', $params))
|
||||||
|
printf("[051] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt))
|
||||||
|
printf("[052] [%d] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)\n", mysqli_stmt_errno($stmt));
|
||||||
|
|
||||||
|
print "done!";
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
Regular, procedural, using variables
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, procedural, using references for everything
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, object oriented, using references for everything
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, object oriented, using variable for types. using references for bound parameter
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, object oriented, using constant for types. using references for bound parameter
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, procedural, using references for everything but using variable for types
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variables for resource and types
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variables for resource and types
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types, array
|
||||||
|
int(1)
|
||||||
|
string(1) "a"
|
||||||
|
[048] [2031] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)
|
||||||
|
[052] [2031] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)
|
||||||
|
done!
|
||||||
|
--UEXPECTF--
|
||||||
|
Regular, procedural, using variables
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, procedural, using references for everything
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, object oriented, using references for everything
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, object oriented, using variable for types. using references for bound parameter
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, object oriented, using constant for types. using references for bound parameter
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, procedural, using references for everything but using variable for types
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variables for resource and types
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variables for resource and types
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
Call user func, procedural, using references for bound parameter, using variable for resource, using constant for types, array
|
||||||
|
int(1)
|
||||||
|
unicode(1) "a"
|
||||||
|
[048] [2031] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)
|
||||||
|
[052] [2031] (Message might vary with MySQL Server version, e.g. No data supplied for parameters in prepared statement)
|
||||||
|
done!
|
93
ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt
Normal file
93
ext/mysqli/tests/mysqli_stmt_bind_result_zerofill.phpt
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
--TEST--
|
||||||
|
mysqli_stmt_bind_result() - ZEROFILL
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
require_once('skipif.inc');
|
||||||
|
require_once('skipifemb.inc');
|
||||||
|
require_once('skipifconnectfailure.inc');
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
require_once('connect.inc');
|
||||||
|
require_once('table.inc');
|
||||||
|
|
||||||
|
function zerofill($offset, $link, $datatype, $insert = 1) {
|
||||||
|
|
||||||
|
mysqli_query($link, 'ALTER TABLE test DROP zero');
|
||||||
|
$sql = sprintf('ALTER TABLE test ADD zero %s UNSIGNED ZEROFILL', $datatype);
|
||||||
|
if (!mysqli_query($link, $sql)) {
|
||||||
|
// no worries - server might not support it
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mysqli_query($link, sprintf('UPDATE test SET zero = %s', $insert))) {
|
||||||
|
printf("[%03d] UPDATE failed, [%d] %s\n",
|
||||||
|
$offset, mysqli_errno($link), mysqli_error($link));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!($stmt = mysqli_prepare($link, 'SELECT zero FROM test LIMIT 1'))) {
|
||||||
|
printf("[%03d] SELECT failed, [%d] %s\n",
|
||||||
|
$offset, mysqli_errno($link), mysqli_error($link));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = null;
|
||||||
|
if (!mysqli_stmt_bind_result($stmt, $result)) {
|
||||||
|
printf("[%03d] Bind failed, [%d] %s\n",
|
||||||
|
mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mysqli_stmt_execute($stmt) || !mysqli_stmt_fetch($stmt)) {
|
||||||
|
printf("[%03d] Execute or fetch failed, [%d] %s\n",
|
||||||
|
mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = mysqli_stmt_result_metadata($stmt);
|
||||||
|
$meta = mysqli_fetch_fields($res);
|
||||||
|
mysqli_stmt_free_result($stmt);
|
||||||
|
|
||||||
|
$meta = $meta[0];
|
||||||
|
$length = $meta->length;
|
||||||
|
if ($length > strlen($insert)) {
|
||||||
|
|
||||||
|
$expected = str_repeat('0', $length - strlen($insert));
|
||||||
|
$expected .= $insert;
|
||||||
|
if ($expected !== $result) {
|
||||||
|
printf("[%03d] Expecting '%s' got '%s'\n", $offset, $expected, $result);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if ($length <= 1) {
|
||||||
|
printf("[%03d] Length reported is too small to run test\n", $offset);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
We map those to PHP numeric types -
|
||||||
|
no padding/filling done. Neither with libmysql nor with mysqlnd.
|
||||||
|
zerofill(2, $link, 'TINYINT');
|
||||||
|
zerofill(3, $link, 'SMALLINT');
|
||||||
|
zerofill(4, $link, 'MEDIUMINT');
|
||||||
|
zerofill(5, $link, 'INT');
|
||||||
|
zerofill(6, $link, 'INTEGER');
|
||||||
|
zerofill(7, $link, 'BIGINT');
|
||||||
|
zerofill(8, $link, 'FLOAT');
|
||||||
|
zerofill(9, $link, 'DOUBLE');
|
||||||
|
zerofill(10, $link, 'DOUBLE PRECISION');
|
||||||
|
*/
|
||||||
|
zerofill(11, $link, 'DECIMAL');
|
||||||
|
zerofill(12, $link, 'DEC');
|
||||||
|
|
||||||
|
mysqli_close($link);
|
||||||
|
|
||||||
|
print "done!";
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
done!
|
Loading…
Reference in New Issue
Block a user