--TEST--
mysqli_stmt_bind_param() - checking whether the parameters are modified (bug#44390)
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
<?php
require('table.inc');
$link->set_charset('latin1');
class foo {
// @var $bar string
public $bar;
}
$foo = new foo;
$foo->bar = "фубар";
echo "Test 1:\n";
$stmt = $link->prepare("SELECT ? FOO");
var_dump($foo); // here you can see the bar member var beeing a string
$stmt->bind_param("s", $foo->bar);
var_dump($foo); // this will show $foo->bar beeing a reference string
$stmt->bind_result($one);
$stmt->execute();
$stmt->fetch();
$stmt->free_result();
echo("$one\n\n");
// it is getting worse. Binding the same var twice with different
// types you can get unexpected results (e.g. binary trash for the
// string and misc data for the integer. See next 2 tests.
echo "Test 2:\n";
$stmt = $link->prepare("SELECT ? FOO, ? BAR");
var_dump($foo);
$stmt->bind_param("si", $foo->bar, $foo->bar);
echo "---\n";
var_dump($foo);
echo "---\n";
$stmt->execute();
var_dump($foo);
echo "---\n";
$stmt->bind_result($one, $two);
$stmt->fetch();
$stmt->free_result();
echo("$one - $two\n\n");
echo "Test 3:\n";
$stmt = $link->prepare("SELECT ? FOO, ? BAR");
var_dump($foo);
$stmt->bind_param("is", $foo->bar, $foo->bar);
var_dump($foo);
$stmt->bind_result($one, $two);
$stmt->execute();
$stmt->fetch();
$stmt->free_result();
echo("$one - $two\n\n");
echo "done!";
?>
--CLEAN--
<?php
require_once("clean_table.inc");
?>
--EXPECTF--
Test 1:
object(foo)#%d (1) {
[%u|b%"bar"]=>
%unicode|string%(%d) "фубар"
}
object(foo)#%d (1) {
[%u|b%"bar"]=>
&%unicode|string%(%d) "фубар"
}
фубар
Test 2:
object(foo)#%d (1) {
[%u|b%"bar"]=>
%unicode|string%(%d) "фубар"
}
---
object(foo)#%d (1) {
[%u|b%"bar"]=>
&%unicode|string%(%d) "фубар"
}
---
object(foo)#%d (1) {
[%u|b%"bar"]=>
&%unicode|string%(%d) "фубар"
}
---
фубар - 0
Test 3:
object(foo)#%d (1) {
[%u|b%"bar"]=>
%unicode|string%(%d) "фубар"
}
object(foo)#%d (1) {
[%u|b%"bar"]=>
&%unicode|string%(%d) "фубар"
}
0 - фубар
done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>