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

PDO Indsæt array med nøgle som kolonnenavn

Jeg ville gøre det på denne måde:

Deklarer først kolonnerne. Vi bruger disse til at udtrække et undersæt af $_POST til brug som kolonner. Ellers kan en bruger sende falske anmodningsparametre, der ikke matcher nogen kolonner i tabellen, hvilket ville bryde vores SQL.

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

Opret navngivne parameterpladsholdere, dvs. :username .

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

Form SQL'en separat, fordi det er nemmere at læse og fejlfinde, hvis det er i sin egen variabel.

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

Altid tjek for fejlstatus returneret fra prepare() og execute() .

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

Her tager vi kun felterne i $_POST, der matcher de kolonner, vi ønsker at indsætte.

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

Og videregiv det array til execute() . Kontroller igen for fejlreturstatus.

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



  1. Hvad er den mest elegante måde at gemme tidsstempel med nanosec i postgresql?

  2. Sådan masseændrer du MySQL Triggers DEFINER

  3. Indsigt i SQL Server Unique Constraints

  4. Sådan ændres skemaet for et objekt (tabel, visning, lagret procedure) i SQL Server-database - SQL Server / TSQL vejledning del 28