197 votes

Obtenir une instruction d'insertion pour une ligne existante dans MySQL

En utilisant MySQL, je peux exécuter la requête :

SHOW CREATE TABLE MyTable;

Il renverra l'instruction de création de table pour la table spécifiée. Cette fonction est utile si vous avez déjà créé une table et que vous souhaitez créer la même table dans une autre base de données.

Est-il possible d'obtenir la déclaration d'insertion pour une ligne ou un ensemble de lignes déjà existantes ? Certaines tables ont de nombreuses colonnes, et il serait bon que je puisse obtenir une instruction d'insertion pour transférer des lignes dans une autre base de données sans avoir à écrire l'instruction d'insertion, ou sans exporter les données au format CSV et importer ensuite les mêmes données dans l'autre base de données.

Pour clarifier, ce que je veux, c'est quelque chose qui fonctionnerait comme suit :

SHOW INSERT Select * FROM MyTable WHERE ID = 10;

Et que l'on me renvoie ce qui suit :

INSERT INTO MyTable(ID,Col1,Col2,Col3) VALUES (10,'hello world','some value','2010-10-20');

1voto

Josh Bernfeld Points 1890

Avec PDO, vous pouvez procéder de cette manière.

$stmt = DB::getDB()->query("SELECT * FROM sometable", array());

$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $fields = array_keys($array[0]);

    $statement = "INSERT INTO user_profiles_copy (".implode(",",$fields).") VALUES ";
    $statement_values = null;

    foreach ($array as $key => $post) {
        if(isset($statement_values)) {
            $statement_values .= ", \n";
        }

        $values = array_values($post);
        foreach($values as $index => $value) {
            $quoted = str_replace("'","\'",str_replace('"','\"', $value));
            $values[$index] = (!isset($value) ? 'NULL' : "'" . $quoted."'") ;
        }

        $statement_values .= "(".implode(',',$values).")";

    }
    $statement .= $statement_values . ";";

    echo $statement;

0voto

techtheatre Points 874

Je pense que la réponse fournie par Laptop Lifts est la meilleure... mais comme personne n'a suggéré l'approche que j'utilise, je me suis dit qu'il fallait que j'intervienne. J'utilise phpMyAdmin pour configurer et gérer mes bases de données la plupart du temps. Dans ce logiciel, vous pouvez simplement cocher les lignes que vous voulez, et en bas cliquer sur "Exporter" et choisir SQL. Vous obtiendrez des instructions INSERT pour les enregistrements que vous avez sélectionnés. J'espère que cela vous aidera.

0voto

Mohamad Hamouday Points 1002

Vous pouvez essayer ceci

function get_insert_query($pdo, $table, $where_sth)
{
    $sql = "";
    $row_data = $pdo->query("SELECT * FROM `{$table}` WHERE $where_sth")->fetch();
    if($row_data){
        $sql = "INSERT INTO `$table` (";

        foreach($row_data as $col_name => $value){
            $sql .= "`".$col_name."`, ";
        }
        $sql = rtrim($sql, ", ");

        $sql .= ") VALUES (";

        foreach($row_data as $col_name => $value){
            if (is_string($value)){
                $value = $pdo->quote($value);
            } else if ($value === null){
                $value = 'NULL';
            }

            $sql .= $value .", ";
        }
        $sql = rtrim($sql, ", ");
        $sql .= ");";
    }

    return $sql;
}

Pour l'utiliser, il suffit d'appeler :

$pdo = new PDO( "connection string goes here" );
$sql = get_insert_query($pdo, 'texts', "text_id = 959");
echo $sql;

0voto

toni-gar-20 Points 21

Mise à jour de l'instruction d'insertion pour les registres actuels dans PhpMyAdmin :

  1. Sélectionnez la table de votre base de données à partir de laquelle vous souhaitez obtenir les registres.
  2. Onglet "Export" dans le menu du haut comme dans l'image ci-dessous

enter image description here

  1. Exportation personnalisée

  2. Descendez jusqu'à "Options de création de données"

enter image description here

Une fois sur place, sélectionnez la fonction "Insérer" dans la syntaxe de votre choix.

0voto

RangaM Points 19

C'est très simple. Tout ce que vous avez à faire est d'écrire une instruction Insert dans un bloc statique et de l'exécuter en tant que script comme un bloc entier.

Par exemple, si vous souhaitez obtenir les instructions d'insertion d'une table (par exemple ENGINEER_DETAILS) pour les lignes sélectionnées, vous devez exécuter ce bloc.


spool 
set sqlformat insert
select * from ENGINEER_DETAILS where engineer_name like '%John%';
spool off;

Le résultat de ce bloc sera des déclarations d'insertion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X