ID:               49946
 Updated by:       u...@php.net
 Reported By:      chris at network-13 dot com
 Status:           Bogus
 Bug Type:         MySQLi related
 Operating System: Windows 7
 PHP Version:      5.3.0
 New Comment:

Thanks Johannes, I wasn't 100% sure about it... I asked Tony to add a
note to the docs.


Previous Comments:
------------------------------------------------------------------------

[2009-10-21 15:45:05] johan...@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

For supporting OUT-params this must be a reference. The value you're
passing in can'T be referenced so PHP complains.

Older versions of PHP treated this situation wrong without complaining
which was changed in order to help producing bug free code. Please see
the user notes in the  call_user_func_array() man page for different
work-arounds.

------------------------------------------------------------------------

[2009-10-21 15:38:00] chris at network-13 dot com

Does this mean 5.3.0 is correct in giving the error and 5.2.10 was
wrong in letting it work?

------------------------------------------------------------------------

[2009-10-21 15:27:40] u...@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

Reply via email to