您好,这是我第一次在这里发帖, 所以,如果我在我的问题中做错了什么,我会尝试解决它。
无论如何。 我正在尝试和数据库接口类及其功能的一些安全性。 我得到的错误是:“警告:mysqli_stmt_bind_param():无效的类型或没有在”blah blah“第46行中指定的类型,我将在下面标记
public function RunSql($Sql, $BindVars) {
$con = DataBase::ConDataBase(); // setting up connection
$type = DataBase::MakeTypes($BindVars);// make type string to send to bind_param.
$result = DataBase::ReturnData($Sql, $BindVars, $type);
if (!$result) {
printf("Error: %s\n", mysqli_error($con));
exit();
}
$_SESSION['connection'] = $con;
return $result;
}
这是我使用mysqli函数将数组和Sql发送到数据库的第二步
public function ReturnData($Sql, $BindVars, $type) {
$con = DataBase::ConDataBase();// connecting to DB again
$stmt = $con->prepare($Sql);
$sql_stmt = mysqli_prepare($con, $Sql);
这两个是我一直在努力学习的, 他们应该做同样的事情,但我似乎无法工作。
call_user_func_array('mysqli_stmt_bind_param', array_merge(array($sql_stmt, $type), DataBase::refValues($BindVars)));
//call_user_func_array(array($sql_stmt, $type), DataBase::refValues($BindVars));
这些是错误行。我迷路了。
mysqli_stmt_execute($sql_stmt);
$stmt->store_result();
$result = $stmt->get_result();
return $result;
}
这需要并迭代在Sql中使用的值数组,并构建bind_param需要的$ type字符串。
public function MakeTypes($BindVars) {
$type = "";
foreach ($BindVars as $value) {
$type .= substr(gettype($value), 0, 1);
}
//echo $type;
}
我不确定这是来自这里的答案......我现在似乎无法找到它
public function refValues($arr) {
$refs = array();
foreach ($arr as $key => $value) {
$refs[$key] = &$arr[$key];
}
return $refs;
}
我很抱歉长时间的代码泛滥,但我认为可能与谁能帮助我完成这项工作有关。
祝你好运,谢谢你的时间。