Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Inserir grande quantidade de variáveis ​​na tabela usando PDO

Consultas preparadas de forma dinâmica


Você pode construir sua consulta dinamicamente a partir do array $_POST:

Mas NUNCA confie na entrada do usuário, o que significa que você não pode confiar que os dados em $_POST conterão nomes de coluna válidos.

1. Higienize os dados da postagem

Você pode definir uma matriz de nomes de colunas na lista de permissões $whitelist = array('field1', 'field2', ...) , e depois use:
$data = array_intersect_key($_POST, array_flip($whitelist));

para encontrar a interseção entre as colunas da lista de permissões e sua matriz $_POST. (Obrigado @BillKarwin)

2. Crie a 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; 
}

Isso lhe dará uma instrução SQL da forma:
$sql = INSERT INTO directory (field1, field2) VALUES (:field1, :field2)

e prepare a declaração:
$stmt = $dbh->prepare($sql);

3. Parâmetros de vinculação

Você pode então vincular parâmetros dinamicamente aos espaços reservados:
foreach ($data as $placeholder => $value) {
    $stmt->bindValue(":$placeholder", $value);
 }

e execute-o:
$stmt->execute();

Um pouco mais avançado...