IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

INSERT .. SELECT sur 2 BDD


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut INSERT .. SELECT sur 2 BDD
    Bonjour,

    J'ai une erreur dans ma requête, qqu pourrais m'aider?

    La table se nomme PLD_LINK dans les deux BDD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    $host1 = "localhost";
    $user1 = "admin1";
    $pass1 = "password1";
    $dbname1 = "name1";
     
    $host2 = "localhost";
    $user2 = "admin1";
    $pass2 = "password2";
    $dbname2 = "name2";
     
    $db2 = mysql_connect($host2,$user2,$pass2) or die (mysql_errno().": ".mysql_error()."<BR>");
    mysql_select_db($dbname2,$db2);
    $db1 = mysql_connect($host1,$user1,$pass1) or die (mysql_errno().": ".mysql_error()."<BR>");
    mysql_select_db($dbname1,$db1);
     
    $req=("INSERT INTO $dbname2.PLD_LINK (ID,TITLE,DESCRIPTION,URL)
    SELECT PLD_LINK.ID,PLD_LINK.TITLE,PLD_LINK.DESCRIPTION,PLD_LINK.URL
    FROM PLD_LINK Where ID=280");
     
    $result=mysql_query($req);
    ?>

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut


    Quel est ton message d'erreur ?

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Apparemment, tu essaies d'insérer dans la table PLD_LINK quelque chose qui s'y trouve déjà. Et comme il y a l'ID qui est probablement la clé primaire, ça coince !

    il ne manquerait pas la variable $dbname1 dans le SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM $dbname1.PLD_LINK Where ID=280"
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut
    CinePhil. j'ai essayé en ajoutant "$dbname1" tel que montré ci-bas, mais ne fonctionne pas.

    Antoun, il n'y a pas de message d'erreur, la requête s'exécute mais la copie ne se fait pas...

    Merci pour vos commentaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    $host1 = "localhost";
    $user1 = "admin1";
    $pass1 = "password1";
    $dbname1 = "name1";
     
    $host2 = "localhost";
    $user2 = "admin1";
    $pass2 = "password2";
    $dbname2 = "name2";
     
    $db2 = mysql_connect($host2,$user2,$pass2) or die (mysql_errno().": ".mysql_error()."<BR>");
    mysql_select_db($dbname2,$db2);
    $db1 = mysql_connect($host1,$user1,$pass1) or die (mysql_errno().": ".mysql_error()."<BR>");
    mysql_select_db($dbname1,$db1);
     
    $req=("INSERT INTO $dbname2.PLD_LINK (ID,TITLE,DESCRIPTION,URL)
    SELECT PLD_LINK.ID,PLD_LINK.TITLE,PLD_LINK.DESCRIPTION,PLD_LINK.URL
    FROM $dbname2.PLD_LINK Where ID=280");
     
    $result=mysql_query($req);
    ?>

  5. #5
    Membre très actif
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Par défaut
    Salut.
    On peut se connecter vers deux bases de données MYSQL en meme temps ?. on apprend des choses. Normalement on ne peut selectionner qu'un base a la fois , ou je suis dasn les choux !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Par défaut
    Heu... ta pas un ID qui s'incrémente tout seul dans la table de la base de destination ? Car la tu force l'ID, et si c'est la cas il n'aime pas trop en général...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Par défaut
    Il n'y a pas de limitation sur le nombre de connections, il faut juste sauvegarder l'identifiant de connection pour y retrouver ses petits

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    En fait, il te faut un utilisateur qui a les droits sur les deux bases. A partir de là, tu n'as besoin que d'une seule connexion. Par ailleurs, si tu ne vois pas de message d'erreur, c'est que tu l'affiches pas...
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $db1 = mysql_connect($host2, $user2, $pass2) 
      or die (mysql_errno() . ": " . mysql_error() . "<BR>");
    mysql_select_db($dbname2, $db2);
    
    $req = "INSERT INTO $dbname2.PLD_LINK (ID,TITLE,DESCRIPTION,URL)
    SELECT ID, TITLE, DESCRIPTION, URL
    FROM $dbname1.PLD_LINK 
    Where ID = 280" ;
    
    $result=mysql_query($req, $db2) 
       or die (mysql_errno() . ": " . mysql_error() . "<BR>") ;

    et au passage,

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut
    Oupsssssssss

    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1142: SELECT command denied to user 'gabriel_Admin'@'localhost' for table 'PLD_LINK'
    Info supplémentaire:
    Voici ma version : MySQL version 5.0.67-community
    L'enregistrement provient de dbname2 et doit être inscrit dans dbname1.

    Effectivement, l'utilisateur est le même pour les deux BDD. JE ne suis pas sur comment réduire ma requête pour un seul utilisateur.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut Voici ce que j'ai trouvé sur la copie d'un enregistrement entre 2 BDD
    Using INSERT INTO ... SELECT you can copy data from one database to another. You need the correct privileges for both.

    Enter the source database, database1:
    use database1;

    Then write to which fields in the destination database you want to copy to, database2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO database2.table1 (field1,field3,field9)
    SELECT table2.field3,table2.field1,table2.field4
    FROM table2;
    The order of the selected fields and the inserted fields must match, so you enter the correct data. Before doing this, use "describe database2.table1" and "describe database1.table2", to make sure the new fields can hold the same kind of information.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut
    Est-ce possible que mon erreur est attribuable au fait que les deux BDD ont des 'addresses IP' différentes?

  12. #12
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Tu avais dit :

    $host1 = "localhost";
    ...
    $host2 = "localhost";
    Si ce sont deux serveurs différents, ça ne peut pas marcher comme ça. Il faut que tu récupères toutes les valeurs de la req1 dans des variables PHP, à partir desquelles tu rédiges une requête destinée à la seconde base.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut
    Je suis désolé, étant donné que j'ai un seul compte avec un unique "host provider" mais avec 5 adresses IP différentes, je croyait qu'il s'agissait d'un serveur unique et que localhost devait être utiliser pour les 2 BDD.

    Pour ce qui est d'un script en PHP, je suis nul.

    Si qqu veut m'offrir ces services, j'aimerais bien avoir un tel script.

  14. #14
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    par exemple (non testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    $host1 = "localhost";
    $user1 = "admin1";
    $pass1 = "password1";
    $dbname1 = "name1";
     
    $host2 = "localhost";
    $user2 = "admin1";
    $pass2 = "password2";
    $dbname2 = "name2";
     
    // passe une valeur texte ou NULL en code SQL
    // par ex. aujourd'hui devient 'aujourd''hui'
    function CoderSQL($valeur) {
      if ($valeur === NULL) return 'NULL' ;
      $valeur = strreplace("'", "''", $valeur) ;
      return "'$valeur'" ;
    }
     
    $db1 = mysql_connect($host1,$user1,$pass1) or die (mysql_errno().": ".mysql_error()."<BR>") ;
    mysql_select_db($dbname1,$db1) or die (mysql_errno().": ".mysql_error()."<BR>") ;
     
    $req=("SELECT PLD_LINK.ID,PLD_LINK.TITLE,PLD_LINK.DESCRIPTION,PLD_LINK.URL
      FROM PLD_LINK 
      WHERE ID = 280");
     $result=mysql_query($req);
     
    // stockage des résultats dans un tableau
    $vals[] = $result['ID'] ;
    $vals[] = CoderSQL($result['TITLE']) ;
    $vals[] = CoderSQL($result['DESCRIPTION']) ;
    $vals[] = CoderSQL($result['URL']) ;
     
    // requête d'insertion
    $req = "INSERT INTO PLD_LINK (ID, TITLE, DESCRIPTION, URL) VALUES (" ;
    $req .= join(', ', $vals) . ")" ;
     
    $db2 = mysql_connect($host2,$user2,$pass2) or die (mysql_errno().": ".mysql_error()."<BR>");
    mysql_select_db($dbname2,$db2) ;
    mysql_query($req, $db2) or die (mysql_errno().": ".mysql_error()."<BR>") ;
    ?>

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Par défaut
    Merci Antoun,

    Je vais y jeter un coup d'oeil et revoir l'utilisation des variables PHP.

    A+

Discussions similaires

  1. Insert select sur un champ Long
    Par pev15 dans le forum SQL
    Réponses: 10
    Dernier message: 06/03/2009, 16h43
  2. INSERT / SELECT sur tables multiples
    Par AlexisB dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/11/2008, 15h17
  3. Réponses: 5
    Dernier message: 26/02/2007, 01h50
  4. pb d'insertion avec un SELECT sur une autre table
    Par epeichette dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 22h58
  5. insert-select sur 2 base différente
    Par gskoala dans le forum Paradox
    Réponses: 2
    Dernier message: 16/11/2004, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo