Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bind Param with array of parameters

Tags:

I have a function that does this:

function registerUser($firstName, $lastName, $address, $postcode, $email, $password) {     $params = array($firstName, $lastName, $address, $postcode, $email, $password);     $result = $this->db->bind("INSERT INTO Users VALUES (?, ?, ?, ?, ?, ?)", 'ssssss', $params); } 

Which sends off to my database class, which does this:

public function bind($query, $type, $params) {     $this->query = $query;     $stmt = $this->mysqli->prepare($this->query);     $stmt->bind_param($type, $param);     $stmt->execute; } 

The problem is this doesn't work.

What I was hoping to do, was to take the $params list and have it list them after the $type, so that the query would resemble:

$stmt->bind_param('ssssss', $firstName, $lastName, $address, $postcode, $email, $password); 

But obviously I'm going about it the wrong way.

is there a way to make the array...transform as it were, into a list to be printed out at the bind_param query stage?

like image 327
David G Avatar asked Apr 26 '13 12:04

David G


1 Answers

call_user_func_array "Call a callback with an array of parameters"

call_user_func_array(array($stmt, "bind_param"), array_merge(array($type), $params)); 

should do the job

UPDATE: you have also to change your params array:

$params = array(&$firstName, &$lastName, &$address, &$postcode, &$email, &$password); 

as mysqli_stmt::bind_param expects the second and the following parameters by reference.


EDIT: Your query seems to be wrong. Maybe you have less fields than you have variables there. Do:

"INSERT INTO Users (field1, field2, field3, field4, field5, field6) VALUES (?, ?, ?, ?, ?, ?)" 

where you replace the name of the fields by the correct names

like image 107
bwoebi Avatar answered Sep 23 '22 14:09

bwoebi