sql >> Base de Datos >  >> RDS >> Mysql

Inserte una gran cantidad de variables en la tabla usando PDO

Consultas dinámicas preparadas

Puede crear su consulta de forma dinámica a partir de la matriz $_POST:

Pero, NUNCA confíe en la entrada del usuario, lo que significa que no puede confiar en que los datos en $_POST contendrán nombres de columna válidos.

1. Limpiar los datos de la publicación

Puede definir una matriz de nombres de columna incluidos en la lista blanca $whitelist = array('field1', 'field2', ...) y luego use:

$data = array_intersect_key($_POST, array_flip($whitelist));

para encontrar la intersección entre las columnas incluidas en la lista blanca y su matriz $_POST. (Gracias @BillKarwin)

2. Cree la consulta

private function buildInsertSql($data, $table) {
    $columns = "";  
    $holders = "";  
    foreach ($data as $column => $value) {  
       $columns .= ($columns == "") ? "" : ", ";  
       $columns .= $column;  
       $holders .= ($holders == "") ? "" : ", ";  
       $holders .= ":$column";  
    }  
    $sql = "INSERT INTO $table ($columns) VALUES ($holders)";  
    return $sql; 
}

Esto le dará una declaración SQL de la forma:

$sql = INSERT INTO directory (field1, field2) VALUES (:field1, :field2)

y prepare la declaración:

$stmt = $dbh->prepare($sql);

3. Parámetros de enlace

A continuación, puede vincular dinámicamente los parámetros a los marcadores de posición:

foreach ($data as $placeholder => $value) {
    $stmt->bindValue(":$placeholder", $value);
 }

y ejecutarlo:

$stmt->execute();

Un poco más avanzado...