我需要在数据处理期间进行大量的mysql查询。由于实际代码几乎没有变化,我想用函数封装它。这样的功能可以如下:
// input: sql statement, binding parameters and paramter types
private prepared_statement($query, $params, $param_string) {
// I use this peace of code over and over again
$stmt = $this->db->prepare($query);
if (!$stmt) {//TODO log
echo "Error in prepared statement";
}
// problem
$stmt->bind_param($param_string, $param1, $param2, ...);
$stmt->execute();
// problem
$stmt->bind_result($);
$stmt->fetch();
$stmt->close();
//...
}
第二个函数参数是一个数组,其中包含要进行查询的所有绑定参数。我不知道如何将它们传递给bind_param
函数,因为它只接受绑定参数作为单个变量。
是否可以动态地将param
数组转换为可以传递给bind_param
的变量?
此外,我想知道如何最好地绑定结果,因为我不知道将返回多少结果。实际上它与上面的问题相同。
答案 0 :(得分:1)
如果您有这样的数组:
$array = Array("name"=>"Jhon","surname"=>"Conor");
你可以这样做:
extract($array);
然后像这样使用:
echo "Your name is " . $name . " and your surname is " . $surname;
答案 1 :(得分:1)
在Jon使用call_user_func_array
的提案的帮助下,我设法获得了以下解决方案:
private function prepared_statement($query, $params, $param_string) {
$fetched_data = array();
$binding_params[] = & $param_string;
foreach($params as &$current_param) {
$binding_params[] = & $current_param;
}
$stmt = $this->db->prepare($query);
if (!$stmt) {
//TODO log
echo "Error in prepared statement";
}
call_user_func_array(array($stmt, "bind_param"), $binding_params);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_array(MYSQLI_ASSOC)) {
foreach($row as $r)
array_push($fetched_data, $r);
}
$stmt->close();
return $fetched_data;
}
答案 2 :(得分:0)
您可以使用' $'两次得到变量:
foreach($my_arr AS $k => $v){
$$k = $v;
}