私はそれをこのようにします:
最初に列を宣言します。これらを使用して、列として使用する$_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));
}