#49946 [Com]: mysqli_stmt_bind_param saying parameter 3 is value not a reference
| From: | chris at network-13 dot com | Date: | Wed, 21 Oct 2009 15:38:01 +0000 |
| Subject: | #49946 [Com]: mysqli_stmt_bind_param saying parameter 3 is value not a reference | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-143764@lists.php.net to get a copy of this message | ||
ID: 49946
Comment by: chris at network-13 dot com
Reported By: chris at network-13 dot com
Status: Open
Bug Type: MySQLi related
Operating System: Windows 7
PHP Version: 5.3.0
New Comment:
Does this mean 5.3.0 is correct in giving the error and 5.2.10 was
wrong in letting it work?
Previous Comments:
------------------------------------------------------------------------
[2009-10-21 15:27:40] uw@php.net
Sounds like Bogus
http://de3.php.net/manual/en/function.call-user-func-array.php
-> Note: Referenced variables in param_arr are passed to the function
by a reference, others are passed by a value. In other words, it does
not depend on the function signature whether the parameter is passed by
a value or by a reference.
call_user_func_array does call by value and mysqli_stmt_bind_param() is
documented to expect variables passed by reference.
http://de3.php.net/manual/en/mysqli-stmt.bind-param.php
bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed
&$... ] )
------------------------------------------------------------------------
[2009-10-21 15:20:42] chris at network-13 dot com
Description:
------------
I tested this on both linux/windows with PHP 5.2.10 and it gave no
problems. After updating the windows machine to PHP 5.3.0 it now gives
the error.
Warning: Parameter 3 to mysqli_stmt_bind_param() expected to be a
reference, value given
Reproduce code:
---------------
<?php
class db {
public $result;
function getresult(){
$connection = mysqli_connect('localhost', 'root', 'password',
'testdb');
$args = func_get_args();
$query = array_shift($args);
if(!$connection){ mysqli_connect_error(); exit(); }
$sql = mysqli_prepare($connection, $query);
$types = str_repeat('s', count($args));
array_unshift($args, $types);
array_unshift($args, $sql);
call_user_func_array('mysqli_stmt_bind_param', $args);
mysqli_stmt_execute($sql);
mysqli_stmt_bind_result($sql, $result);
mysqli_stmt_fetch($sql);
mysqli_close($connection);
$this->result = $result;
}
}
$uid = NEW db();
$uid->getresult("SELECT uid FROM testtable WHERE user = ?","Chris");
echo $uid->result;
?>
Expected result:
----------------
It should echo the uid of the user.
Actual result:
--------------
Warning: Parameter 3 to mysqli_stmt_bind_param() expected to be a
reference, value given in D:\www\mysqli2.php on line 16
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=49946&edit=1