Mysql
 sql >> Database >  >> RDS >> Mysql

PDO Inserisci matrice usando la chiave come nome della colonna

Lo farei in questo modo:

Dichiara prima le colonne. Li useremo per estrarre un sottoinsieme di $ _POST da utilizzare come colonne. Altrimenti un utente potrebbe passare parametri di richiesta fasulli che non corrispondono a nessuna colonna della tabella, il che interromperebbe il nostro SQL.

$columns = array('username','email','password','name');
$column_list = join(',', $columns);

Crea segnaposto di parametri denominati, ad esempio :username .

$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));

Forma l'SQL separatamente, perché è più facile da leggere ed eseguire il debug se è nella sua stessa variabile.

$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";

Sempre controlla lo stato di errore restituito da prepare() e execute() .

$statement = $db->prepare($sql);
if ($statement === false) {
  die(print_r($db->errorInfo(), true));
}

Qui prendiamo solo i campi di $_POST che corrispondono alle colonne che vogliamo inserire.

$param_values = array_intersect_key($_POST, array_flip($columns));

E passa quell'array a execute() . Ancora una volta, controlla lo stato di restituzione dell'errore.

$status = $statement->execute($param_values);
if ($status === false) {
  die(print_r($statement->errorInfo(), true));
}