只要你的值是一个数组,你可以用一个随机数的值做一个准备语句。示例(未经测试):
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()}";
}
}
是的,你需要知道你在插入什么......它不是神奇的。 –
@DanyCaissy说什么。另外,你在你的codesample中调用'$ rows'的东西不是行,而是列或者字段,也许这就是你混淆的根源? – fvu
查看$行中的内容会很有帮助,但除非出现类似'foo,bar,baz'的情况,否则您可能会生成无效的SQL。您的字段数必须与值计数匹配(例如,如果$行是4个字段,则为值指定3个占位符是语法错误)。 –