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 :

mysqli_fetch_array() expects parameter 1 to be mysqli_result


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut mysqli_fetch_array() expects parameter 1 to be mysqli_result
    Bonjour,

    j'ai le warning du titre avec ce code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $timestamp=time();
    $ip=$_SERVER['REMOTE_ADDR'];
    $query ="select * from visites where ((".$timestamp." - timestamp <= 3600) and ip = ".$ip.")";
    $result=mysqli_query($db,$query);
     
    $timestampmax=0;
    while ($ligne = mysqli_fetch_array($result)) {
    	if ($ligne['timestamp']>$timestampmax) $timestampmax=$ligne['timestamp'];
    }
    et si j'active l'affichage des erreurs mysqli avec mysqli_report(MYSQLI_REPORT_ALL);le warning est remplacé par ces 2 messages :
    Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.0.1)' at line 1' in C:\wamp\www\test\compteur.php on line 27
    mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.0.1)' at line 1 in C:\wamp\www\test\compteur.php on line 27
    qu'est-ce qu'il faut changer ?

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    bonjour,

    dans la requête faudrait entouré la variable $ip par des quotes car cette dernière est une chaîne de caractères.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           $query ="select * from visites where ( '".$timestamp."' - timestamp <= 3600) and ip = '".$ip."'";

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Merci beaucoup pour l'explication mais il ne faut pas entourer $timestamp pour que ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query ="select * from visites where ((".$timestamp." - timestamp <= 3600) and ip = '".$ip."')";

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    J'ai décoché "résolu" car comme ça marchait sous Wamp, je l'ai mis en ligne et j'ai de nouveau le warning :
    mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in
    Pour mémoire le code correspondant est :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //maj table "visites"
    $timestamp=time();
    $ip=$_SERVER['REMOTE_ADDR'];
    $query ="select * from visites where ((".$timestamp." - timestamp <= 3600) and ip = '".$ip."')";
    $result=mysqli_query($db,$query);
     
    // déterminer le timestamp le plus récent pour cet IP
    $timestampmax=0;
    while ($ligne = mysqli_fetch_array($result)) {
    	if ($ligne['timestamp']>$timestampmax) $timestampmax=$ligne['timestamp'];
    }
    ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    1/ Il n'est pas du tout judicieux d'appeler un champs "timestamp", car c'est un "mot réservé" SQL.

    2/ ce n'est pas la bonne methode.
    => mysqli_num_rows()
    si 0 : Ok on ajoute
    sinon on update

    et :
    select id ... (pas *)
    Dernière modification par Invité ; 14/08/2013 à 12h02.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    comme vient de le signifier jreaux62, timestamp est un mot réservé et si tu veux l'utiliser il faut le protégé :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query ="select * from visites where ((".$timestamp." - `timestamp` <= 3600) and ip = '".$ip."')";

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 03/02/2015, 16h14
  2. [MySQL] Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result
    Par sab_info dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/01/2013, 14h12
  3. [MySQL] mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean
    Par dancom5 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/04/2011, 01h06
  4. [MySQL] Message : Warning: mysqli_free_result() expects parameter 1 to be mysqli_result
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 18/02/2009, 15h03

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