Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PDO Array einfügen mit Schlüssel als Spaltenname

Ich würde es so machen:

Deklarieren Sie zuerst die Spalten. Wir werden diese verwenden, um eine Teilmenge von $_POST zur Verwendung als Spalten zu extrahieren. Andernfalls könnte ein Benutzer falsche Anforderungsparameter übergeben, die mit keiner Spalte der Tabelle übereinstimmen, was unser SQL beschädigen würde.

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

Erstellen Sie Platzhalter für benannte Parameter, z. B. :username .

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

Bilden Sie das SQL separat, da es einfacher zu lesen und zu debuggen ist, wenn es sich in einer eigenen Variablen befindet.

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

Immer Überprüfen Sie den von prepare() zurückgegebenen Fehlerstatus und execute() .

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

Hier nehmen wir nur die Felder von $_POST, die mit den einzufügenden Spalten übereinstimmen.

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

Und übergeben Sie dieses Array an execute() . Überprüfen Sie erneut den Status der Fehlerrückgabe.

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