0

所以我正在创建一个基本的 cms 应用程序来尝试更深入地学习 PDO,但我似乎偶然发现了一个问题。我希望能够使用一个函数将数据插入到 MySQL 数据库中,到目前为止我已经得到了这个代码......

    public function insert($table, $rows, $values) {

        $data = $values;

        $STH = $this->DBH->("INSERT INTO `" . $table . "` (". $rows . ") values (?, ?, ?)");

    }

值的问号是否代表我将输入数据库的数据条数?如果是这样,我如何知道将基于 $data 数组输入的数据量?(所有 $values 都将以 'value, value2, value3' 等格式输入)

希望我已经明确了自己的要求,我很不擅长解释自己哈哈..谢谢。

4

2 回答 2

0

只要您的 $data 变量是一个数组,您就可以在准备好之后将其传递给 PDO::Statement 中的 execute 方法。当问号用于绑定时,它只需要一个非关联的值数组,按照您希望它们绑定的顺序(按照问号出现在查询中的顺序)

public function insert($table, $rows, $values) {
    $data = $values;
    $STH = $this->DBH->prepare("INSERT INTO `" . $table . "` (". $rows . ") values (?, ?, ?)");
    $STH->execute($data);
}

您还可以使用名称进行绑定:

public function insert($table, $rows, $values) {
    $data = array(":col1" => $values[0], ":col2" => $values[1], ":col3" => $values[2]);
    $STH = $this->DBH->prepare("INSERT INTO `" . $table . "` (". $rows . ") values (:col1, :col2, :col3)");
    $STH->execute($data);
}
于 2013-07-02T15:26:51.167 回答
0

只要您的值是一个数组,您就可以使用随机数量的值执行准备好的语句。示例(未经测试):

public function insert($table, $rows, $values) {
  $params = rtrim(", ", str_repeat("?, ", count($values)));
  try {
    $stmt = $this->DBH->prepare("INSERT INTO $table ($rows) VALUES ($params)");
    for($i = 1; $i <= count($values); $i++) {
      $stmt->bindValue($i, $values[$i-1]);
    }
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
  } catch(PDOException $e) {
    echo "Oops... {$e->getMessage()}";
  }
}

编辑仅传递两个参数($table$data作为关联数组),您可以执行以下操作(未经测试):

public function insert($table, $data) {
  $keys = array_keys($data);
  $values = array_values($data);
  $params = rtrim(", ", str_repeat("?, ", count($values)));
  try {
    $stmt = $this->DBH->prepare("INSERT INTO $table (`".implode("`,`", $keys)."`) VALUES ($params)");
    $stmt->execute($values);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
  } catch(PDOException $e) {
    echo "Oops... {$e->getMessage()}";
  }
}
于 2013-07-02T15:16:52.380 回答