Mysql
 sql >> Base de données >  >> RDS >> Mysql

créer un insert php dynamique dans la fonction mysql?

C'est ce que nous utilisons pour faire une chose similaire (insérer dans une table sur laquelle nous n'avons aucun contrôle et qui n'a pas d'accès à l'API)

L'utilisation de la requête DESCRIBE garantit que seules les colonnes existantes sont insérées.

$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() est notre wrapper autour de MDB2.

Et bien sûr, cela leur permet de remplir toute la rangée. Si vous avez des colonnes restreintes (identifiants à incrémentation automatique, etc.), vous devrez les filtrer en dehors des données du formulaire...