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 :

Exécution script UPDATE [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut Exécution script UPDATE
    Bonjour à tous,
    J'ai un petit souci avec mon script php. En fait je souhaite mettre à jour une base avec des donnée d'une autre base. Comme je travaille sous Mysql 3.23, je suis obligé de faire deux requetes. La premiere récupère les valeurs à insérer, la seconde les insère. Voici le script :
    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
     
    <html>
    <body>
    <?
    $connexion = mysql_connect(localhost, "user");
    $db=mysql_select_db("ma_base", $connexion);
    $requete=mysql_query("SELECT * FROM table1;");
    $row=mysql_fetch_object($requete);
    $i=1;
    while ($row=mysql_fetch_object($requete)) {
    $query=mysql_query("UPDATE table2 SET champ2='".$row->champ1."' WHERE ID='".$row->ID."';");
    echo $i."<br>";
    $i=$i+1;
    }
    ?>
    </body>
    </html>
    Le souci c'est qu'en fait, au bout d'un moment, j'ai une erreur 500 me disant qu'il est impossible d'afficher la page. A votre avis, est ce que cela viens du fait que j'essai de mettre à jour environ 80000 lignes ? Est ce trop pour php ? Merci pour vos réponses

  2. #2
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Par défaut
    Ce que tu peux faire pour être sûr que ce n'est pas un problème de temps d'exécution du script, c'est placer cette ligne dans ton script php:


  3. #3
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    et ça fais quoi ?

  4. #4
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    ça enlève la limite de temps d'exécution du script
    Dia [ Page DVP ] [ Site pro ]

  5. #5
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Ah d'accord, mais est-ce qu'il existe une limite de temps avec Apache ?

  6. #6
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    y a un timeout pour Apache

    mais la fonction que t'indique xave est une fonction PHP, elle modifie temporairement (pour le script) la directive max_execution_time de php.ini
    Dia [ Page DVP ] [ Site pro ]

  7. #7
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Ok donc il faut que je modifie le timeout de Apache. Je vais regardé ça de plus près. Merci pour votre aide

  8. #8
    Membre émérite
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Par défaut
    mais non, faut pas modifier le timeout de Apache

    faut utiliser la fonction que xave t'indique... pourquoi tu vas chercher des trucs compliqués ? :p
    essaie avec ce qu'il te conseille
    Dia [ Page DVP ] [ Site pro ]

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    Limite le nombre de ligne de ta requête de lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete=mysql_query("SELECT * FROM table1 LIMIT 5;");
    Comme ça, tu verras tout de suite si ton script fonctionne sur un petit volume, ou s'il y a un autre problème.

  10. #10
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Merci je vais essayé avec la Limit sur ma requete. Mais pour info j'ai testé la fonction php pour désactiver le timeout mais ca n'a rien changé. Voila pourquoi j'ai voulu modifié le timeout d'Apache (Mais ca n'a rien changé non plus )

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 130
    Par défaut
    est ce que tu as essayé de limiter le nombre d'elements à inserer??

  12. #12
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Alors j'ai essayé avec une limite de 5, et ça à fonctionner mais il m'as mit 148 lignes à jours ! Il y'a surement des doublons mais à ce point ! Du coup je l'ai relancé plusieurs fois mais je n'ai toujours que 148 lignes qui sont modifiés. Du coup j'ai modifié ma première requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM table1 LEFT JOIN table2 ON table1.champ1=table2.champ2 WHERE table2.id IS NULL GROUP BY id LIMIT 10
    Afin que ne soit pas les meme ID qui soit pris à chaque fois dans ma requete mais ca ne change rien

  13. #13
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Par défaut
    Ouh là... tu limites à 5 et tu a 148 changements... y a problème quelque part!

    Je te recommande vivement de faire un echo de chacune de tes requetes et de bien vérifier ce qu'elles font, il doit y avoir quelque chose.

    D'autre part, si tu utilises set_time_limit(0), tu n'as plus à te soucier d'un quelconque timeout.
    Avec cette fonction, je fais des dumps de plusieurs centaines de milliers d'enregistrements sur ma base MySQL sans aucun problème.

    Donc, comme ça t'a été conseillé, garde ta limite à 5 pour l'instant et vérifie chacune de tes requêtes.

    En cas de besoin, tu sais où nous trouver.

  14. #14
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Bah oui c'est ce que je me dit En plus a chaque UPDATE, j'affiche un compteur qui est incrémenté a chaque requete ce qui me permet de savoir combien de fois il execute la requete. Mais la du coup il s'arrete à 4 . J'y comprend plus rien. Bon je vais retenter le coup. Mais je pose une question. La table sur laquelle je fais le UPDATE contient environ 3 000 000 de lignes. Ca viens peut etre de la, elle trop grande ? J'ai vu que php utilise un buffer et moi il est 8M, faudrait peut être le modifié, qu'en pensez-vous ?

  15. #15
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Par défaut
    Non, le fait qu'il te modifie 148 enregistrements au lieu de 5 n'a rien à voir avec le fait que tu ai 3 000 000 de lignes dans ta table.

    Par contre que ton compteur s'arrête à 4, ça c'est bon signe, c'est qu'il te limite bien les requêtes à 5.

    La question maintenant est de savoir si tu as vraiment tant de doublons que ça dans ta table (auquel cas, je te recommande un grand nettoyage!) ou si tes requêtes touchent des enregistrements qu'elles ne devraient pas, d'où l'étude des requêtes en passant par echo

  16. #16
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Bah en fait les doublons dans ma table peuvent etre normal en fait. Mais quand tu me dis de faire un echo, je fais une echo $rquery dans ma boucle ?

  17. #17
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Par défaut
    Oui, fais

    dans ta boucle (oublie pas de limiter ta boucle à 5) et vérifie les requetes qu'il t'affiche (et quisont donc envoyées à ta base) pour déterminer s'il est normal ou non que ça te modifie autant d'enregistrements (doublons ou prédicat mal adapté).

  18. #18
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    D'accord merci, je test ça et je te tiens au courant, merci beaucoup

  19. #19
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    J'ai fait ce que tu m'as dit et il me retourne un 1 à chaque fois. Est-ce normal. De plus, je fais un sur mon serveur mysql et je vois bien les requetes UPDATE passé. Donc elle se font bien mais j'ai l'impression qu'il écrase juste les données qu'il a déjà écrit. Je vais faire mon enquête

  20. #20
    Membre éclairé Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Par défaut
    Une question sur les limites. Il est possible de lui de ne prendre que les résultats de 10 à 20 par exemple et non pas les dix premiers mais les dix suivants ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/10/2006, 19h01
  2. [Système] Exécuter script sans afficher page
    Par philippe281281 dans le forum Langage
    Réponses: 18
    Dernier message: 08/08/2006, 19h14
  3. [Système] exécuter script VBS
    Par dj-julio dans le forum Langage
    Réponses: 1
    Dernier message: 02/02/2006, 10h27
  4. Exécuter script .SQL
    Par christellel198 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/11/2005, 15h53
  5. Réponses: 7
    Dernier message: 20/10/2005, 20h51

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