PHP mysqli准备语句自己的类

问题描述 投票:0回答:1

我想写一个方法来向数据库添加记录。

我的方法:

final public function newData($sql, $placeholder, $array) {
  $stmt = $this->db->prepare($sql);
  $stmt->bind_param($placeholder, implode(",", $array));
  return $stmt->execute();
}

..................

// Code---Example
$sql = "INSERT INTO table (name, data) VALUES (?,?)";

$placeholder =  "ss";

final public function newData($sql, $placeholder, [$array]) {
  $stmt = $this->db->prepare($sql);
  $stmt->bind_param($placeholder, implode(",", $array));
  return $stmt->execute();
 }

我的问题是如果我想用这种方法保存几个值。我收到警告

警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数与##中的绑定变量数不匹配

我究竟做错了什么?

php mysqli prepared-statement
1个回答
1
投票

你不能这样使用$stmt->bind_param()。您需要进行参数解包,因为bind_param需要类型,然后每个值作为参数。

final public function newData($sql, $placeholder, $array) {
    $stmt = $this->db->prepare($sql);
    $stmt->bind_param($placeholder, ...$array);
    return $stmt->execute();
}

然后使用像:

$sql = "INSERT INTO table (name, data) VALUES (?,?)";

$result = $theDbClass->newData($sql, 'ss', ['foo', 'bar']);
© www.soinside.com 2019 - 2024. All rights reserved.