Я вставляю содержимое $ _POST моего массива PHP в таблицу с PDO. Я смотрел на следующие строки кода, и у меня был один из тех, «должен быть лучший способ сделать это». Если имя ключа совпадает с именем столбца в таблице, есть ли более простой способ вставить его все?
Код, например:
$statement = $db->prepare("INSERT INTO `applications`(`username`, `email`, `password`, `name`) VALUES (?,?,?,?)"); $statement->execute(array($_POST['username'], $_POST['email'],$_POST['password'],$_POST['name'])); 
Этот код РАБОТАЕТ, но он просто немного перегружен (особенно при добавлении большего количества столбцов).
Я бы сделал это так:
Сначала объявите столбцы. Мы будем использовать их для извлечения подмножества $ _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)); }