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?
Advertisement
Answer
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