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 :

Erreur avec fetch_assoc()


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut Erreur avec fetch_assoc()
    Bonjour,

    Je n'arrive pas à faire fonctionner fetch_assoc(). J'ai le message d'erreur :
    Fatal error: Call to a member function fetch_assoc() on a non-object in index.php on line 51
    Pourtant pour le code je me suis basé sur cette page et il est donc sans problème.
    https://arian.io/when-to-use-bind_re...sult-in-mysql/

    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
    $mysqli = new mysqli($db_domain, $db_user, $db_password, $db_database) ;
    if($stmt = $mysqli->prepare("SELECT * FROM user where 1 ")){
       /*
            Binds variables to prepared statement
     
            i    corresponding variable has type integer
            d    corresponding variable has type double
            s    corresponding variable has type string
            b    corresponding variable is a blob and will be sent in packets
       */
      /*
      $email = "myemal@free.fr" ;
      $stmt->bind_param('s',$email);
      */
       /* execute query */
       $stmt->execute();
     
       /* Store the result (to get properties) */
       $stmt->store_result();
     
       /* Get the number of rows */
       $num_of_rows = $stmt->num_rows;
       echo $num_of_rows;
     
       /* Get the result */
       $result = $stmt->get_result();
     
       while ($row = $result->fetch_assoc()) {
         echo 'Firstname: '.$row['user_firstname'].'<br>;';
       }
     
       /* free results */
       $stmt->free_result();
     
       /* close statement */
       $stmt->close();
    }
    Le echo $num_of_rows; me renvoie bien 3.

    Quelqu'un a une idée ? J'ai l'impression que ça viendrait d'un problème de configuration du serveur.

    Merci.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    J'ai réussi l'équivalent en 3 lignes de codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql = $mysqli->query("SELECT * FROM user where 1") ;
    echo $sql->num_rows ;
    while($row = $sql->fetch_array()) {
      echo $row["user_firstname"]."<br>" ;
    }
    Pourquoi certains utilisent toutes ces méthodes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ->prepare()
    ->execute()
    ->bind()
    ->store_result()
    ->get_result()
    Ils sont payés à la ligne de code ?

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La préparation sert quand il y a un paramètre. C'est le "?" dans la requête de ton exemple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Oui je sais, mais on peut directement coder une requête comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = $mysqli->query("SELECT * FROM user WHERE user_email = \"".$email."\""") ;
    Je me demandais, est-ce que passer par les méthode prepare() et bind() fait que le code est plus sécurisé ?

    Merci,
    Vincent.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Yop,

    Les requêtes préparées ne sont pas sécurisées à 100%... Cela dit, ça reste l'une des méthodes les plus simples et permettent de palier à de nombreux de problèmes sécuritaires.

    Cf : http://php.net/manual/fr/mysqli.quic...statements.php
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les requêtes préparées ne sont pas sécurisées à 100%.
    Tu as une exemple d'une requête avec paramètre qui ne serait pas sécurisée ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Erreur de ma part, j'ai lu la doc de travers.

    Il est pas précisé si elles le sont pleinement, mais a priori, ça reste le moyen le plus sécurisé de passer des arguments pour protéger ses requêtes...

    My bad.
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Oui en effet, cela est plus sécurisé.

    Comme quoi, la première faiblesse d'une application reste son développeur.

    Merci pour vos réponses.

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

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 07h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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