我创建了一个查询类来处理我所有的基本 sql 函数,在类中我有一个基本函数,它使用准备好的语句插入数据,即“插入”函数,我不太清楚为什么,但我一直收到同样的错误(列出以上)每次我调用该函数时class Query{ private $conn; private $table; public function __construct($conn, $table) { $this->conn = $conn; $this->table = $table; } public function Insert($fields, $placeholders, $binders, $values) { $field_val= implode(', ', $fields); $ph=implode(', ', $placeholders); array_walk($values, function(&$x) {$x = "'$x'";}); $val = implode(', ', $values); $query = 'INSERT INTO '.$this->table.' ('.$field_val.') VALUES('.$ph.')'; $stmt = $this->conn->prepare($query); $stmt->bind_param(''.$binders.'', $val); $stmt->execute(); }}这是用于将数据插入注释表的函数的示例,连接来自模块中包含的单独数据库文件 $database = new Database(); $conn = $database->connect(); //values $comment_date = mysqli_real_escape_string($conn, htmlspecialchars($_POST['date-comment'])); $commenter = mysqli_real_escape_string($conn, htmlspecialchars($_POST['comment_name_of'])); $comment = mysqli_real_escape_string($conn, htmlspecialchars($_POST['comment'])); $comments_save = new Query($conn, 'nw_comments'); $fields = array('commenter_name', 'comment_value', 'date_commented'); $placeholders = array('?', '?', '?'); $binders = "sss"; $values = array($commenter, $comment, $comment_date); $comments_save->Insert($fields,$placeholders,$binders,$values);
1 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
看起来代码正在将字符串标量传递给bind_param
. 我想我们要传递数组的元素。
我们可以这样做:
$stmt->bind_param(''.$binders.'', $values);
正如 Bill Karwin 正确指出的那样,传递整个数组(如上一行)是行不通的,它与传递单个引用的原始数组存在相同的问题。语法应该导致该...
数组被解包,每个单独的元素通过引用传递,元素数量可变。)
像这样的东西:
$stmt->bind_param(''.$binders.'', ...$values);
对于通过绑定参数传递值,我们不需要将值括在单引号中。不需要这些行:
array_walk($values, function(&$x) {$x = "'$x'";}); $val = implode(', ', $values);
- 1 回答
- 0 关注
- 158 浏览
添加回答
举报
0/150
提交
取消