sql >> Databasteknik >  >> RDS >> Mysql

PDO Infoga matris med nyckel som kolumnnamn

Jag skulle göra så här:

Deklarera kolumnerna först. Vi kommer att använda dessa för att extrahera en delmängd av $_POST för användning som kolumner. Annars kan en användare skicka falska begärandeparametrar som inte matchar några kolumner i tabellen, vilket skulle bryta vår SQL.

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

Skapa namngivna parameterplatshållare, dvs :username .

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

Forma SQL separat, eftersom det är lättare att läsa och felsöka om det finns i sin egen variabel.

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

Alltid kontrollera om felstatus returneras från prepare() och execute() .

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

Här tar vi bara fälten i $_POST som matchar kolumnerna vi vill infoga.

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

Och skicka den arrayen till execute() . Återigen, kolla efter felreturstatus.

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



  1. Dataanslutningsändringar 2020.24

  2. Ska det finnas en SQLiteOpenHelper för varje tabell i databasen?

  3. konvertera mysql tidsstämpel till faktiskt datum och tid?

  4. Försöker 'ringa' lagrade procedurer med CodeIgniter