sql >> Database >  >> RDS >> Mysql

een dynamische php-insert maken in de mysql-functie?

Dit is wat we gebruiken om iets soortgelijks te doen (invoegen in een tabel waar we geen controle over hebben en die geen API-toegang heeft)

Het gebruik van de DESCRIBE-query zorgt ervoor dat alleen bestaande kolommen worden ingevoegd.

$db = new DB();
$sql = 'DESCRIBE `table`';
$result = $db->query($sql);
$row = array();
$query = array();

while ($row = $result->fetchRow())
{
    if (array_key_exists($row['field'], $form_data))
        if (is_null($form_data[$row['field']]))
            $query[$row['field']] = 'NULL';
        else
            $query[$row['field']] = $db->quote($form_data[$row['field']]);
}

$keys = array_keys($query);

foreach ($keys as &$key)
    $key = $db->quoteIdentifier($key);

unset($key);

$vals = array_values($query);

$sql = 'INSERT INTO `table` '
     . '(' . implode(', ', $keys) . ') '
     . 'VALUES(' . implode(', ', $vals) . ')';

edit:DB() is onze wrapper rond MDB2.

En hierdoor kunnen ze natuurlijk de hele rij invullen. Als u beperkte kolommen heeft (id's voor automatisch verhogen en dergelijke), moet u deze uit de formuliergegevens filteren...




  1. Waarom kunnen PL/pgSQL-functies een neveneffect hebben, terwijl SQL-functies dat niet kunnen?

  2. Hoe kan ik mySql-kolomlengte/waarden krijgen?

  3. Een database met een wachtwoord beveiligen in Access 2016

  4. IP-adres van gedownloade bestanden invoegen in mysql