PHP PDO插入数据库功能问题

时间:2013-07-02 15:07:56

标签: php mysql database pdo

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

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

        $data = $values;

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

    }

值的问号是否代表我将输入数据库的数据片段数?如果是这样,我怎么知道将根据$ data数组输入的数据量? (所有$值将以“value,value2,value3”等格式输入)

希望我已经清楚地知道我在问什么,我很难解释自己哈哈..谢谢。

2 个答案:

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

答案 1 :(得分: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);
}