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 :

Migration requête simple vers requête préparée par PHP mysqli


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 719
    Par défaut Migration requête simple vers requête préparée par PHP mysqli
    Bonjour,

    Passer d'une requête simple à une requête préparée sans être spécialiste n'est pas chose facile car les changements interviennent aussi sur le code en AVAL de la requête.

    Je prends l'exemple d'un petit SELECT.

    Requête simple en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $connexion = mysqli_connect ("localhost", "mysql_user", "mysql_password");
     
    $requete = "SELECT champ_1 FROM base WHERE id='" . intval ($ref) . "'  LIMIT 1";
     
    $resultat = mysqli_query ($connexion, $requete);
     
    $nbr = mysqli_num_rows ($resultat);
     
    $retour = mysqli_fetch_assoc ($resultat);
    Je cherche le code équivalent mais avec requête préparée, cela devient beaucoup plus compliqué :


    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
    $requete = "SELECT champ_1 FROM base WHERE id=" . ? . "  LIMIT 1";
     
    $stmt = mysqli_prepare ($connexion, $requete);
     
    $id = intval ($id);
     
    mysqli_stmt_bind_param ($stmt, 'i', $id);
     
    mysqli_stmt_execute($stmt);
     
    mysqli_stmt_store_result($stmt);
     
    $nbr = mysqli_stmt_num_rows ($stmt);
     
    /* C'est bon, je récupère le bon nombre de lignes */
     
    $retour = mysqli_stmt_get_result ($stmt);
     
    $retour = mysqli_stmt_fetch_array ($retour, MYSQLI_ASSOC);
     
    /* Là c'est erreur fatale. */
    Pouvez-vous m'aider ?

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 956
    Par défaut
    Bonjour

    Peut-être que ce n'est pas le bon fil de discussion
    Voir ici ? https://www.developpez.net/forums/f2...-base-donnees/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 719
    Par défaut
    Citation Envoyé par Michel.Priori
    Peut-être que ce n'est pas le bon fil de discussion
    C'est une question qui porte sur PHP et plus précisément sur la classe mysqli.

    Le modérateur déplacera le sujet si nécessaire.

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    j'ai l'impression que la fonction "mysqli_stmt_fetch_array" n'existe pas et que c'est plutot "mysqli_stmt_fetch" :
    https://www.php.net/manual/fr/mysqli-stmt.fetch.php

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 719
    Par défaut
    Citation Envoyé par mathieu Voir le message
    j'ai l'impression que la fonction "mysqli_stmt_fetch_array" n'existe pas et que c'est plutot "mysqli_stmt_fetch" :
    https://www.php.net/manual/fr/mysqli-stmt.fetch.php
    Je pense que tu as raison.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Bind result variables
    mysqli_stmt_bind_result($stmt, $retour);
     
    // Fetch value
    mysqli_stmt_fetch($stmt);
    Mon problème est de trouver les équivalents après requêtes préparées de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $nbr = mysqli_num_rows ($resultat);
     
    $retour = mysqli_fetch_assoc ($resultat);

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    regardez ce qu'il y a écrit là :
    https://www.php.net/manual/fr/mysqli-stmt.execute.php

    Si la requête produit un ensemble de résultats, il peut être récupéré à l'aide de la fonction mysqli_stmt_get_result() ou en le récupérant ligne par ligne directement à partir de l'instruction à l'aide de la fonction mysqli_stmt_fetch().

Discussions similaires

  1. Réponses: 13
    Dernier message: 03/12/2010, 15h56
  2. importation fichier csv vers mysql par php
    Par frboyer dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2009, 09h21
  3. [PHP-JS] Extration mysql vers javascript par php.
    Par SirDarken dans le forum Langage
    Réponses: 1
    Dernier message: 26/05/2008, 14h18
  4. [MySQL] Exportation mysql vers format xml par php
    Par kamacho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/12/2007, 22h40
  5. Réponses: 2
    Dernier message: 08/12/2005, 05h28

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