PHP mysqli准备语句自己的类

时间:2017-12-24 12:10:06

标签: php mysqli prepared-statement

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

我的方法:

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():类型定义字符串中的元素数与##

中的绑定变量数不匹配

我做错了什么?

1 个答案:

答案 0 :(得分: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']);