所以我正在创建一个基本的cms应用程序来尝试更深入地学习PDO,但我似乎偶然发现了一个问题。我希望能够使用函数将数据插入MySQL数据库,到目前为止我已经有了这个代码...
public function insert($table, $rows, $values) {
$data = $values;
$STH = $this->DBH->("INSERT INTO `" . $table . "` (". $rows . ") values (?, ?, ?)");
}
值的问号是否代表我将输入数据库的数据片段数?如果是这样,我怎么知道将根据$ data数组输入的数据量? (所有$值将以“value,value2,value3”等格式输入)
希望我已经清楚地知道我在问什么,我很难解释自己哈哈..谢谢。
答案 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);
}