私はこのようにします:
最初に列を宣言します。これらを使用して、列として使用する$_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が独自の変数に含まれていると、読み取りとデバッグが容易になるためです。
$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));
}