php-src/ext/mysqli/tests/mysqli_stmt_bind_param_references.phpt

203 lines
6.3 KiB
PHP

--TEST--
mysqli_stmt_bind_param() - playing with references
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
<?php
include "connect.inc";
require('table.inc');
function findRow($offset, $link, $id, $label) {
$sql = sprintf("SELECT id, label FROM test WHERE id = '%d' AND label = '%s'",
$id, $label);
if (!$res = mysqli_query($link, $sql)) {
printf("[%03d + 1] %s failed, [%d] %s\n",
$offset, $sql, mysqli_errno($link), mysqli_error($link));
return false;
}
if (!$row = mysqli_fetch_assoc($res)) {
printf("[%03d + 2] fetch for %s failed, [%d] %s\n",
$offset, $sql, mysqli_errno($link), mysqli_error($link));
return false;
}
mysqli_free_result($res);
if ($row['id'] != $id) {
printf("[%03d + 3] Expecting %s/%s got %s/%s\n",
$offset, gettype($id), $id,
gettype($row['id']), $row['id']
);
return false;
}
if ($row['label'] != $label) {
printf("[%03d + 4] Expecting %s/%s got %s/%s\n",
$offset, gettype($label), $label,
gettype($row['label']), $row['label']
);
return false;
}
$sql = sprintf("DELETE FROM test WHERE id = '%d' AND label = '%s'",
$id, $label);
if (!mysqli_query($link, $sql)) {
printf("[%03d + 5] %s failed, [%d] %s\n",
$offset, $sql, mysqli_errno($link), mysqli_error($link));
return false;
}
return true;
}
// or we will get dups around [28]
mysqli_query($link, "ALTER TABLE test DROP PRIMARY KEY");
$stmt = mysqli_stmt_init($link);
if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (?, ?)"))
printf("[001] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
$id = 100;
$label = 'v';
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
printf("[002] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[003] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
// no need to check the return value, will bail and make EXPECTF fail if need be
findRow(4, $link, $id, $label);
$id++;
$label_ref = &$label;
$label = 'w';
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_ref)))
printf("[005] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(7, $link, $id, $label_ref);
$id++;
$label_ref_ref = &$label_ref;
$label = 'x';
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_ref_ref)))
printf("[007] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(9, $link, $id, $label_ref_ref);
$id = 9;
$label = $id;
$label_num = &$label;
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_num)))
printf("[010] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(12, $link, $id, $label_num);
$label_num = &$id;
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_num)))
printf("[013] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[014] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(15, $link, $id, $label_num);
$label = 9;
$id = &$label;
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
printf("[015] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[016] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(17, $link, $id, $label);
$base = 9;
$id = &$base;
$label = &$id;
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
printf("[018] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[019] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(20, $link, $id, $label);
$id_ref = &$id;
$label_ref = &$label;
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref, $label_ref)))
printf("[021] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(23, $link, $id_ref, $label_ref);
$id_ref_ref = &$GLOBALS['id_ref'];
$label_ref_ref = &$GLOBALS['label_ref_ref'];
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref_ref, $label_ref_ref)))
printf("[024] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[025] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(26, $link, $id_ref_ref, $label_ref_ref);
$id = 102;
$label = new stdClass();
$label->label = 'y';
$id_ref = &$GLOBALS['id'];
$label_ref = &$label->label;
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id_ref, $label_ref)))
printf("[027] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== @mysqli_stmt_execute($stmt))
printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(29, $link, $id_ref, $label_ref);
$id = 103;
$label_a = &$label_b;
$label_b = &$label_a;
$label_a = 'z';
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label_b)))
printf("[030] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[031] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(32, $link, $id, $label_b);
class foo {
public $foo;
function foo() {
$this->foo = &$this->bar;
}
}
class bar extends foo {
public $bar = 'v';
}
$bar = new bar();
$id++;
$label = &$GLOBALS['bar']->foo;
if (true !== ($tmp = mysqli_stmt_bind_param($stmt, "is", $id, $label)))
printf("[033] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
if (true !== mysqli_stmt_execute($stmt))
printf("[034] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
findRow(35, $link, $id, $label);
mysqli_stmt_close($stmt);
mysqli_close($link);
print "done!";
?>
--EXPECTF--
done!