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 :

Sql ok ; mais bug dans fonction


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Par défaut Sql ok ; mais bug dans fonction
    Bonjour.

    Je ne comprend pas mon erreur.
    Si je met le SELECT sans fonction ca marche.
    Si le met dans la fonction ca bug.
    Ca me répond erreur sur : $r=$db->query($s);


    Bonnes journées


    Ci-dessous le code qui bug.

    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
    <!DOCTYPE html><html><body><?php
    function db()
    {
        $x='xxxxxxxxxx';
        $y='xxxxxx';
        $z='xxxxxxxx';
     
        $o= array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
     
        $db=new PDO($x,$y,$z,$o);
        return $db;
    }
     
    $db=db();
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    function toto()
    {
        $s="SELECT user_id FROM perso_candidature WHERE id =102";
    	$r=$db->query($s); 
        while($w=$r->fetch(PDO::FETCH_OBJ)) 
        {
            $uid=$w->user_id;
        }
        echo $uid;
    }
    toto();
    ?></body></html>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    $db n'est pas défini dans la fonction.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function toto()
    {
       global $db;
    ...

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonjour Western, on appelle ça la portée des variables... qui par défaut, ne portent pas au delà de ta fonction (variable locale), sauf si tu les passes en paramètre.
    Comme tu ne développes pas objet, prends l'habitude de mettre d'abord toutes tes fonctions, puis de les convoquer ensuite... C'est plus lisible pour toi.
    Autre chose, quitte à faire du PDO, autant s'habituer à faire des requêtes préparées. Quand tu auras des saisies utilisateur, il n'y aura aucun danger d'injection SQL.
    Une dernière info, s'il te prend l'envie de mettre ton objet PDO en session... oublie ! Ca coince. Et n'oublie pas de tuer ton PDO, bref, de fermer proprement ta connexion.

    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
    <!DOCTYPE html>
    <body>
    <?php
    function db(){
    	$x='xxxxxxxxxx';
    	$y='xxxxxx';
    	$z='xxxxxxxx';
     
    	$o= array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
     
    	$db=new PDO($x,$y,$z,$o);
    	return $db;
    }
    function requete($db,$id){
    	$s="SELECT user_id FROM perso_candidature WHERE id =?";
    	$r=$db->prepare($s);
    	$r->execute(array($id)); 
    	while($w=$r->fetch(PDO::FETCH_OBJ)) 
    	{
    	$uid=$w->user_id;
    	}
    	echo $uid;
    }
     
    $db=db();
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    requete($db,102);
    $db=NULL;
     
    ?>
    </body>
    </html>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Par défaut
    J'ai perdu un heure dessus.
    ...

    On fait quoi contre les erreurs idiotes que l'on ne voit pas même en relisant plusieurs fois ?
    C'est pas la première fois et c'est chronophage

    Merci !
    Bonne journée

  5. #5
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Tu n'actives pas tes erreurs Apache ? Ca guide bien quand même.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 169
    Par défaut
    J'ai les erreur PDO et les erreurs php normales qui me disent le numéro de ligne et le type d'erreur.
    Mais contre les erreur du type annoncé plus haut... C'est surtout sois-même qui nécessite d'activer un module.
    C'est vrai aussi que la dose de sommeil et la quantité d'heure à codé joue la dessus

    Je me disait juste que certains avaient peu être une astuce.
    Comme celle re réecrire toutes ses variables quand on ne trouve pas la fautive (qu'on la lit sans faute même quand elle en a une) .

Discussions similaires

  1. [A-03] Bug dans fonction int() ?
    Par Gandalf24 dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/02/2009, 12h46
  2. [ismember] Bug dans fonction ?
    Par tom3w dans le forum MATLAB
    Réponses: 2
    Dernier message: 28/01/2008, 17h57
  3. [9i] bug dans la fonction transform XMLType (XSL) ?
    Par Nico57 dans le forum Oracle
    Réponses: 1
    Dernier message: 20/01/2006, 10h11
  4. CROSSTAB ::marche dans access mais pas dans MS SQL 2000
    Par anselmeJ dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 07h56
  5. [PL/SQL] requete qui marche mais pas dans un cursor
    Par victor.ward dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/09/2005, 22h21

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