我需要帮助为动态mysqli预处理语句创建方法。以下代码有错误。我知道我完全偏离mysqli_stmt_bind_param的设置方式,但我无法找到解决方案。我的编码风格可能很奇怪,因为我使用的是OO php,但程序性的mysqli。我没有时间弄清楚OO mysqli,因为我阅读/观看的书籍和视频使用程序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);
}
答案 0 :(得分:1)
使用OO mysqli很简单:
mysqli_blah($this->dbc)
来电更改为$this->dbc->blah()
。mysqli_stmt_blah($stmt)
来电更改为$stmt->blah()
。此外,始终检查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()
。