Re: call_user_func_array and bind_result
| From: | Mari Masuda | Date: | Sat, 17 Dec 2011 05:57:36 +0000 |
| Subject: | Re: call_user_func_array and bind_result | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-316049@lists.php.net to get a copy of this message | ||
On Dec 16, 2011, at 4:51 PM, David Harkness wrote:
> Each *value* in the array must be a reference to an existing variable--they cannot be null or
> direct values.
[snip]
Thank you very much for your explanation and example code. I was missing the fact that the *values*
in the array must be references. I was thinking that call_user_func_array wanted a reference to the
array itself where I wanted the values stored, but when I tried doing
call_user_func_array(array($ps, 'bind_result'), &$params);
I got the following deprecation notice so I knew I was on the wrong track but didn't know where
I was going wrong:
Warning: Call-time pass-by-reference has been deprecated in
/Applications/apache/htdocs/hila/includes/class.AbstractModel.php on line 176
In the course of studying your example and trying to get it to work I also discovered a problem
elsewhere in my code where the value of the primary key field in my MySQL database, defined as
user_id bigint(20) unsigned NOT NULL AUTO_INCREMENT
was being returned to PHP as a string instead of an int, and this was causing a type mismatch that
ultimately resulted in all fields of the results array being populated with NULLs, which is why all
of the examples on the pages I Googled did not appear to be working for me.
In the end I changed the relevant part of my code to the following and thanks to your help it is now
working:
$params = array();
$values = array();
foreach ($metadata as $object) {
$params[] = &$values[$object->orgname];
}
call_user_func_array(array($ps, 'bind_result'), $params);
$ps->fetch();
print "<pre>";
var_dump($values);
print "</pre>";
Thanks again and happy holidays!