Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PDO Insert Array usando a chave como nome da coluna


Eu faria assim:

Declare as colunas primeiro. Vamos usá-los para extrair um subconjunto de $_POST para uso como colunas. Caso contrário, um usuário pode passar parâmetros de solicitação falsos que não correspondem a nenhuma coluna da tabela, o que quebraria nosso SQL.
$columns = array('username','email','password','name');
$column_list = join(',', $columns);

Crie espaços reservados para parâmetros nomeados, por exemplo, :username .
$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));

Forme o SQL separadamente, pois é mais fácil de ler e depurar se estiver em sua própria variável.
$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";

Sempre verifique o status de erro retornado de prepare() e execute() .
$statement = $db->prepare($sql);
if ($statement === false) {
  die(print_r($db->errorInfo(), true));
}

Aqui levamos somente os campos de $_POST que correspondem às colunas que queremos inserir.
$param_values = array_intersect_key($_POST, array_flip($columns));

E passe esse array para execute() . Novamente, verifique o status de retorno do erro.
$status = $statement->execute($param_values);
if ($status === false) {
  die(print_r($statement->errorInfo(), true));
}