Mysql
 sql >> Base de données >  >> RDS >> Mysql

PDO Insérer un tableau en utilisant la clé comme nom de colonne

Je le ferais de cette façon :

Déclarez d'abord les colonnes. Nous les utiliserons pour extraire un sous-ensemble de $_POST à ​​utiliser comme colonnes. Sinon, un utilisateur pourrait passer de faux paramètres de requête qui ne correspondent à aucune colonne de la table, ce qui casserait notre SQL.

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

Créez des espaces réservés pour les paramètres nommés, c'est-à-dire :username .

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

Formez le SQL séparément, car il est plus facile à lire et à déboguer s'il se trouve dans sa propre variable.

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

Toujours vérifier le statut d'erreur renvoyé par prepare() et execute() .

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

Ici, nous ne prenons que les champs de $_POST qui correspondent aux colonnes que nous voulons insérer.

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

Et passez ce tableau à execute() . Encore une fois, vérifiez le statut de retour d'erreur.

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