繁体   English   中英

动态mysqli准备语句

[英]Dynamic mysqli prepared statement

我需要帮助为动态mysqli准备的语句创建方法。 下面的代码有错误。 我知道我完全不赞成设置mysqli_stmt_bind_param的方式,但是我找不到解决方案。 由于我使用的是OO php,所以我的编码风格可能很奇怪,但是过程mysqli。 自从我阅读/观看的书籍和视频使用程序化mysqli以来,我还没有时间弄清楚OO mysqli。 我针对该问题看到的大多数解决方案都使用OO mysqli。 我宁愿为此获得短期修复,而不是在花了很多时间学习mysqli之后不得不学习PDO。

public function create($sql, $param_type, $param){
    //param_type should be set as $param_type = "'ssss'" so that single quotes get passed into the variable
    //param should be an array
    //param array items should be escaped
    $stmt = mysqli_prepare($this->dbc, $sql);
    mysqli_stmt_bind_param($stmt, $param_type, join(array_values($param), ", "));
    $result = mysqli_stmt_execute($stmt);

    if($result){
        return true;
    } else{
        return false;
    }
    mysqli_stmt_close($stmt);
}

使用OO mysqli很简单:

  1. 将每个mysqli_blah($this->dbc)调用更改$this->dbc->blah()
  2. 将每个mysqli_stmt_blah($stmt)调用更改为$stmt->blah()
  3. 利润!

另外,请始终检查prepare()execute()的返回值。 当解析或执行中存在错误时,它们将返回false,您需要每次检查并报告错误。

mysqli_stmt_bind_param()函数很棘手,因为它期望可变数量的参数,param类型参数中的每个字母一个, 而不是逗号分隔的字符串。 另外,它要求您按引用传递变量,而不是标量,而不是单个数组。

  • 错误: mysqli_stmt_bind_param($stmt, "sss", "red,green,blue");

  • 错误: mysqli_stmt_bind_param($stmt, "sss", "red", "green", "blue");

  • 错误: mysqli_stmt_bind_param($stmt, "sss", $param_array);

  • 右: mysqli_stmt_bind_param($stmt, "sss", $param1, $param2, $param3);

这使您难以做事情:编写一个通用函数来准备和执行带有动态数量参数的SQL语句。 您必须使用call_user_func_array()但必须将参数数组重写为引用数组。

我在过去的几个答案中都写了一些示例:

PDO更轻松地解决了这个问题,您无需绑定任何内容,只需将一个数组传递给execute()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM