【发布时间】:2015-12-07 14:52:29
【问题描述】:
我知道他们已经有很多很多关于这个的问题,但我不知道为什么我的不起作用。
如果我只使用以下代码,我的代码可以正常工作: $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 错误,这是当我尝试通过引用传递并且代码完全中断时...
【问题讨论】:
-
如何使用 call_user_func_array() 以及如何将参数传递给该函数?
-
参数是从测试页传过来的,代码在上面。 call_user_func_array() 也在上面的代码中,在 DB Class 部分(它被注释掉了)
-
你不能通过引用传递参数 - 这是写在文档中的;所以试试这个。 mb 这将帮助你 $res = array(); foreach($parameters as $key => $value) {$res[$key] = &$parameters[$key];}
-
你能在答案中稍微扩展一下吗?我现在真的不明白这一切:(
-
我已经用你的代码让它工作了。谢谢!如果您将其放入答案中,我可以将其标记为正确:)