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

Langage PHP Discussion :

[PDO] SELECT qui fait planter mon script PHP


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Avril 2017
    Messages : 46
    Points : 36
    Points
    36
    Par défaut [PDO] SELECT qui fait planter mon script PHP
    Bonjour à tous,

    Le SELECT ci dessous fait planter mon script PHP, je n'arrive pas à voir ce qui ne va pas. Pouvez vous jeter un oeil svp ?

    La ligne qui fait planter le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form_id = $bdd->query('SELECT * FROM mod71_docomated_forms_mapping');
    Inscrit dans le code suivant:

    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
     
    <?php
    //Start of specific code
    // Connect to database
    try
    {
    	$bdd = new PDO('mysql:host=XXX.mysql.db;dbname=XXX;charset=utf8', 'XXXXX', 'XXXXX',
    								 array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    	catch (Exception $e)
    {
    	die('Erreur : ' . $e->getMessage());
    }
     
     
    // Get form ID, Form entry ID on click
    $doc_id=5;
    $xml_id = $bdd->query('SELECT xml_var_id FROM mod71_docomated_docs_balises WHERE doc_id =\''.$doc_id.'\'');
    $form_id = $bdd->query('SELECT * FROM mod71_docomated_forms_mapping'); // Mon script ne plante plus lorsque je mets ce SELECT en commentaire
    La base dans mySQL:

    Nom : Capture d’écran 2019-07-16 à 15.51.29.png
Affichages : 238
Taille : 97,7 Ko

    Merci pour votre aide.

  2. #2
    Membre habitué
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 31
    Points : 152
    Points
    152
    Par défaut
    Et le message d'erreur ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Avril 2017
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Hello,
    Il y en a pas. La page s’affiche en blanc c’est tout. Idem en activant les messages dans PDO. Si vous avez une autre façon de récupérer le message d’erreur je suis preneur.
    Merci

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour voir une erreur éventuellement provoquée par une requête SQL suite à PDOStatement::query() ou PDOStatement::execute(), tu dois utiliser PDOStatement::errorInfo(), donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($form_id->errorInfo());
    ...Il y en a pas. La page s’affiche en blanc...
    Ça ne veut rien dire, c'est le code de la page html renvoyée qu'il faut regarder (click droit afficher le code source de la page).

    En mode développement, démarrer son code par: ini_set('display_errors', 'On'); peut faire gagner pas mal de temps.


    Soit dit en passant, c'est quand même bien plus propre de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml_id = $dbb->prepare('SELECT xml_var_id FROM mod71_docomated_docs_balises WHERE doc_id = :id');
    $xml_id->execute([':id' => $doc_id]);
    que de batailler à échapper des quotes.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Avril 2017
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Merci pour vos indications.
    Au niveau du code source HTML je n'avais pas plus d'info. Juste un message dans la balise body qui indiquait : Website is experiencing issues. Le site tourne sous Wordpress, ce doit être un message par défaut de WordPress lorsqu'un script plante.

    J'y suis allé par tâtonnement et j'ai compris que le script plantait car j'appelais plus bas la variable $form_id sous forme d'un array. J'ai donc ajouté ->fetch() à la fin de la query et tout est rentré dans l'ordre.

    Et merci pour le conseil sur prepare(). Je vais repasser sur tous mes SELECT et appliquer cette bonne pratique.

    Bien à vous,

    AG

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Avril 2017
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Hello,

    j'ai crié victoire un peu trop vite...

    Je ne parviens pas à afficher le contenu de $xml_var_id en faisant un while ou un foreach...
    Avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $doc_id=5;
    //$xml_id = $dbb->prepare("SELECT xml_var_id FROM mod71_docomated_docs_balises WHERE doc_id =:id");
    //$xml_id->execute([':id' => $doc_id]);
    $xml_id = $bdd->query('SELECT xml_var_id FROM mod71_docomated_docs_balises WHERE doc_id =\''.$doc_id.'\''); //Je fais comme ça car le prepare() et execute font planter le script...je creuserai ce point après
     
    foreach ($xml_id->fetch() as $val)
    {
    var_dump($val['xml_var_id']);
    }
    Voici le message d'erreur que j'ai:

    Nom : Capture d’écran 2019-07-17 à 19.23.18.png
Affichages : 209
Taille : 32,2 Ko

    Si à la place du foreach je met juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $val=$xml_id->fetch();
    echo $val['xml_var_id'];
    Cela affiche bien la 1ere valeur xml_var_id de ma requête.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Avril 2017
    Messages : 46
    Points : 36
    Points
    36
    Par défaut
    Bon j'ai réussi à afficher le contenue de la query en faisant comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($row = $xml_id->fetch(PDO::FETCH_ASSOC))
    {
      echo $row['xml_var_id'].'<br/>';
    }
    Néanmoins si quelqu'un veut bien m'expliquer pourquoi je dois mettre PDO::FETCH_ASSOC dans le fetch pour que cela fonctionne, je suis preneur.

    Je me penche maintenant sur le prepare() et execute() qui sont récalcitrants.

    Bonne soirée,

    AG

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/07/2010, 10h49
  2. include qui fait planter un script
    Par DiverSIG dans le forum Langage
    Réponses: 9
    Dernier message: 27/08/2009, 14h03
  3. [AJAX] Script qui fait planter IE6
    Par bassimgouzi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/08/2008, 19h19
  4. comment trouver ce qui fait planter mon VS ?
    Par gorgonite dans le forum Visual Studio Team System
    Réponses: 3
    Dernier message: 03/06/2008, 23h40
  5. Réponses: 3
    Dernier message: 27/01/2007, 09h11

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