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 :

Problème de sémantique mysql -> mysqli [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de youlikeit
    Homme Profil pro
    Indépendant
    Inscrit en
    Octobre 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 36
    Par défaut Problème de sémantique mysql -> mysqli
    Bonsoir,
    Devant fatalement migrer un jour l'actuelle version de mon hébergement (4.4) vers php 5.6 chez mon hébergeur,... mon site s'est tut !
    J'ai donc pris sur moi de recomposer le code de ma page de requête
    page d'accueil (index.html) champ de recherche -> get
    récupération du get et exécution de 2 requêtes dans la bdd.

    Après avoir un peu galéré pour les connexions, maintenant c'est bon, j'ai un petit problème avec ma première requête SELECT -> comptage du nombre de résultats.

    Ancienne version :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $page = (isset ($_GET['page']) && is_numeric ($_GET['page'])) ? $_GET['page'] : 1;
     
    $q = mysql_query ("SELECT COUNT(id_site) AS nb FROM sites WHERE CONCAT_WS (titre, descro,a, b, c, d, e, f, g, h, i, j) LIKE '%$search%' AND validation='valide'");
     
     
    $d =  mysql_fetch_assoc ($q);
    Nouvelle version avec un bug que je ne vois pas !
    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
     
    //Comptage des réponses à la requête//
     
    $page = (isset ($_GET['page']) && is_numeric ($_GET['page'])) ? $_GET['page'] : 1;
    $requete1 = mysqli_query($connexion,"SELECT * FROM sites 
                                        WHERE CONCAT_WS(titre, descro,a, b, c, d, e, f, g, h, i, j) LIKE '%$search%' AND validation='valide'");
    $row = $requete1->fetch_row();
     
    if ($requete1===FALSE){
        echo "échec de l'exécution de la requête.";
    }
     
    else {
        echo 'Votre recherche comporte : ', mysqli_num_rows($requete1);
    if($row > 1) { echo ' résultats'; } else { echo ' résultat'; } // on vérifie le nombre de résultats pour orthographier correctement. 
     
     
    }
     
    $ok = mysqli_close($connexion)
    L'erreur mentionnée par MySQL :
    Fatal error: Call to a member function fetch_row() on a non-object in C:\xampp\htdocs....
    Mais en faite si je modifie ma requête à sa plus simple expression : ... (SELECT * FROM sites);

    bien sûr je ne réponds plus à la demande $_Get mais il me donne bien le total des sites ! sans erreur fetch_row
    J'ai donc un problème d'expression, j'ai testé et cherché, mais l'œil et la tête se perdent !

    Merci de votre retour.
    Cdlt

  2. #2
    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
    Par défaut
    Utilise mysqli_error() pour afficher les erreurs de ta requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Ce n'est pas de la sémantique mais de la syntaxe.

    Tu mélanges les syntaxes procédurale et orientée objet.

    ... = mysqli_fetch_row(...)

  4. #4
    Membre averti Avatar de youlikeit
    Homme Profil pro
    Indépendant
    Inscrit en
    Octobre 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 36
    Par défaut
    Pour répondre à jreaux62, sauf votre respect, il y a bien dans le global du sujet un problème de "sémantique" et très certainement une erreur de syntaxe.
    Je dois modifier ma requête qui n'est plus un "SELECT COUNT...." par une nouvelle requête SELECT avec une réponse qui devient une variable que je traduis en chiffre : $row = $requete1->fetch_row(); etc...

    J'ai bien tenté de reproduire ma demande à l'identique en ne changeant que le MySQL en mysqli : c'eut été trop beau ! mais quel aurait été l'intérêt de cette évolution de php ?!
    Je n'ai pas encore acquis la sensibilité de ce language... pour bien comprendre pourquoi il ne faut plus réaliser de requêtes en MySQL mais ..sqli ! "i" pour injections peut être (pas le moteur ... ) mais pour la sécurité : je ne sais pas !

    PDO POO ne serait-ce pas genre avec "::" ?

    -> sabotage : je crée une ligne genre " if else {} ?

  5. #5
    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
    Par défaut
    Jreaux t'a donné la bonne réponse : tu as mélangé le style procédural et le style POO.
    Regarde la doc qui détaille l'utilisation de chacun :
    http://php.net/manual/fr/mysqli-result.fetch-row.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Sauf votre respect, j'ai donné la réponse dans mon précédent message.
    Encore faut-il en comprendre le sens... (donc là, oui, c'est un problème de sémantique... )
    voici donc l'explication longue.

    Puisque tu utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete1 = mysqli_query(...); // style procadural
    Il ne faut pas écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = $requete1->fetch_row(); // style orienté objet
    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = mysqli_fetch_row($requete1); // style procadural
    OU ALORS, tout orienté objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
     
    $mysqli->query("...");
    $row = $mysqli->fetch_row();
    Merci de consulter la DOC officielle : Extension mysqli


    Ca t'évitera des soucis de syntaxe.


    N.B. L'ordre des arguments n'est pas toujours le même dans les fonctions mysql_ et leurs équivalents mysqli_.
    A faire attention, donc.

  7. #7
    Membre averti Avatar de youlikeit
    Homme Profil pro
    Indépendant
    Inscrit en
    Octobre 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 36
    Par défaut
    Bien, tout cela est plus clair ! je viens de tester et le résultat est tout aussi erroné !

    1/ Il y aura lieu de commenter le fait que dans ma seconde version ma requete fonctionne même si mélange du style procédural/pdo : pour la partie comptage.

    2/ Le problème est-il dans LA SEMANTIQUE (c-à-d: si j'ai aligné correctement mes idées dans cette phrase) ou encore si je ne me suis pas fourvoyé dans la SYNTAXE (rédaction et rapport des argumentations entre elles) de ma $requete1 ?

    Merci

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

Discussions similaires

  1. difference entre MySQL et Mysqli?
    Par maire106 dans le forum Installation
    Réponses: 3
    Dernier message: 16/06/2005, 16h17
  2. Problème avec Ado, MySQL
    Par sylvain.g dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/06/2005, 10h45
  3. problème démarrage serveur mysql
    Par vbcasimir dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 25/04/2005, 14h14
  4. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  5. problème de connection mysql par tcp/ip
    Par leroyphil dans le forum Administration
    Réponses: 5
    Dernier message: 04/09/2003, 18h27

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