我知道他们已经有很多很多问题,但我不知道为什么我的工作没有。
如果我只使用以下内容,我的代码工作正常: $ this-> stmt-> bind_param(" ii",$ params [0],$ params [1]);
但是如果我使用call_user_func_array,它会中断。我得到的一个建议是通过引用传递$ parameters数组,但添加一个&变量之前也破坏了我的代码...
任何帮助都很受欢迎!
这是我的代码:
数据库类:
function selectQuery($sql, $paramTypes = false, $params = false) {
//Prepare statement
$this->stmt = $this->conn->prepare($sql);
if($this->stmt === false) {
//We have an error
echo 'Wrong SQL: ' . $sql . ' Error: ' . $this->conn->error;
}
//This part doesn't work...
// if ($params) {
// //Bind an unknown number of parameters
// $parameters = array_merge(array($paramTypes), $params);
// call_user_func_array(array($this->stmt, 'bind_param'), $parameters);
// }
//This works.
$this->stmt->bind_param("ii", $params[0], $params[1]);
//Execute statement
$this->stmt->execute();
if ($this->stmt->error) {
echo $this->stmt->error;
return false;
}
//Get the results
$result = $this->stmt->get_result();
$data = $result->fetch_all(MYSQLI_ASSOC);
//Close statement
$this->stmt->close();
//Return the results
return $data;
}
测试页面:
<?php
require_once('DatabaseAccess.php');
$db = new DB();
$sql = "SELECT * FROM table WHERE id = ? OR id = ?";
echo "Fetching data....<br>";
$result = $db->selectQuery($sql, "ii", array(1, 2));
foreach($result as $r) {
echo "<pre>".print_r($r, 1)."</pre>";
}
?>
决定添加更多信息:
我将使用此功能传递参数类型和参数,但数量会有所不同。当我查找如何执行此操作时,每个人都建议使用call_user_func,但每次尝试它时(尝试了几种不同的方式)它都不会起作用。阅读许多线程,但它似乎永远不会工作。如果我直接使用bind_params函数它可以工作,我得到正确的数据返回。
使用call_user_func的东西,我得到的数据没有? mysqli错误,这是我尝试通过引用传递而代码刚刚完全破坏...
答案 0 :(得分:1)
将它放在call_user_func_array()
之前$res = array();
foreach($parameters as $key => $value) {
$res[$key] = &$parameters[$key];
}