Php 传递数组值以在mysqli_stmt::bind_param中使用
你好,这是我第一次在这里发帖, 所以,如果我在我的问题上做错了什么,我会努力纠正它 所以无论如何。 我正在尝试为数据库接口类及其函数提供一些安全性。 我得到的错误是:“警告:mysqli_stmt_bind_param():无效类型或在下面标记的“blah blah”第46行中未指定类型Php 传递数组值以在mysqli_stmt::bind_param中使用,php,mysqli,Php,Mysqli,你好,这是我第一次在这里发帖, 所以,如果我在我的问题上做错了什么,我会努力纠正它 所以无论如何。 我正在尝试为数据库接口类及其函数提供一些安全性。 我得到的错误是:“警告:mysqli_stmt_bind_param():无效类型或在下面标记的“blah blah”第46行中未指定类型 public function RunSql($Sql, $BindVars) { $con = DataBase::ConDataBase(); // setting up connection
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发送到DB
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中要使用的值数组,并构建绑定参数所需的$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;
}
我很抱歉代码长时间泛滥,但我认为可能所有这些都与谁能帮助我工作有关
祝您好运,谢谢您抽出时间。您能解释一下这些行吗?:$in=str_repeat(“?,”,count($values));$in=trim($in,”);$sql=“从用户名为($in)的用户中选择*”";如果您已准备好查询,则不需要此部分。您只需要绑定部分。为什么要使用
调用用户函数数组
?您正在尝试制作ORM/DAO吗?顺便说一句,您将无法使用反射mysqli_stmt_bind_param
,因为它需要您绑定变量,但您绑定的是一个数组的索引,该数组不起作用。这就是我问这些问题的原因。相信我,我什么都试过了。但我确实找到了工作。