我会这样做:
首先声明列。我们将使用这些来提取 $_POST 的子集以用作列。否则,用户可能会传递与表的任何列都不匹配的虚假请求参数,这会破坏我们的 SQL。
$columns = array('username','email','password','name');
$column_list = join(',', $columns);
创建命名参数占位符,即:username
.
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));
单独形成 SQL,因为如果它在自己的变量中,则更易于阅读和调试。
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";
始终检查从prepare()
和返回的错误状态execute()
。
$statement = $db->prepare($sql);
if ($statement === false) {
die(print_r($db->errorInfo(), true));
}
这里我们只取$_POST 中与我们要插入的列相匹配的字段。
$param_values = array_intersect_key($_POST, array_flip($columns));
并将该数组传递给execute()
. 再次检查错误返回状态。
$status = $statement->execute($param_values);
if ($status === false) {
die(print_r($statement->errorInfo(), true));
}