call_user_func_array and bind_result

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I am having trouble figuring out how to properly bind the results of a mysqli prepared statement using call_user_func_array.

I have an "AbstractModel" abstract class and within the class is a method called "load" that takes the primary key of the desired item and retrieves and loads the data from the database into the object.

abstract class AbstractModel {
	// lots of stuff omitted

	// this is just a rough draft so no error checking is implemented
	// $db is a subclass of mysqli
	// $primaryKeyAsTypedItem is an object that holds a type (int, float, string, etc.) and value
	public function load($db, $primaryKeyAsTypedItem) {
		$query = "SELECT * FROM " . $this->tableName . " WHERE " . $this->primaryKeyName . "=?"; 
		$ps = $db->prepare($query); 
		$type_string = $primaryKeyAsTypedItem->getTypeAbbreviation(); 
		$value = $db->escapeSql($primaryKeyAsTypedItem->getValue()); 
		$ps->bind_param($type_string, $value); 
		$ps->execute(); 
		$ps->store_result(); 
		$metadata = $ps->result_metadata()->fetch_fields(); 
		$params = array(); 
		foreach ($metadata as $object) { 
			$params[$object->orgname] = null;
		} 
		call_user_func_array(array($ps, 'bind_result'), $params); 
		$ps->fetch(); 

		// see what is going on
		print "<pre>"; 
		var_dump($params); 
		print "</pre>";

		// more stuff omitted
	}
}

The problem I am having is that mysqli_stmt::bind_result expects a list of individual variables to which the results are bound, not just an array with the proper number of available indices.  I have done a lot of Googling and tried following the advice I found at [1], [2], [3], etc. but I was not successful in getting this to work.  I don't know how I can generically "expand" $params so that this will work for different tables with different fields.  Any pointers greatly appreciated.

[1] http://forums.devshed.com/php-development-5/mysqli-bind-result-to-return-array-568982.html
[2] http://www.charles-reace.com/blog/2009/04/28/mysqli-avoiding-bind_result-for-every-column/
[3] http://us.php.net/manual/en/mysqli-stmt.bind-result.php#102179
-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux