Php 传递数组值以在mysqli_stmt::bind_param中使用

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

你好,这是我第一次在这里发帖, 所以,如果我在我的问题上做错了什么,我会努力纠正它

所以无论如何。 我正在尝试为数据库接口类及其函数提供一些安全性。 我得到的错误是:“警告: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发送到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
,因为它需要您绑定变量,但您绑定的是一个数组的索引,该数组不起作用。这就是我问这些问题的原因。相信我,我什么都试过了。但我确实找到了工作。