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

时间:2014-05-07 19:16:41

标签: php mysqli

您好,这是我第一次在这里发帖, 所以,如果我在我的问题中做错了什么,我会尝试解决它。​​

无论如何。 我正在尝试和数据库接口类及其功能的一些安全性。 我得到的错误是:“警告: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;
}

我很抱歉长时间的代码泛滥,但我认为可能与谁能帮助我完成这项工作有关。

祝你好运,谢谢你的时间。

0 个答案:

没有答案