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 :

Passage à PHP 7.2


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Points : 34
    Points
    34
    Par défaut Passage à PHP 7.2
    Bonjour,
    suite au passage à la version 7.2 de PHP, je dois parcourir tout l'ensemble de mes scripts pour adapter les fonctions Mysqli.
    je progresse mais j'ai des erreur où je ne trouve pas de solution :
    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
    //----------verification de la confirmation ------------------------	
                $req="Select count(*) from confirmations where num_activite='$num_activite'";
    			$confirme=mysqli_fetch_array($conn->query($req));
    			$confirme=$confirme[0];
     
    			if ($confirme > 0)
     
    				{
     
    					//extraction de la date de confirmation
                        $req="SELECT * FROM confirmations WHERE num_activite='$num_activite'";
    					$resultat=mysqli_query($conn->query($req));
     
     
    					if ($ro=mysqli_fetch_array($resultat)) 
     
    						{
     
    							$dateconfirmation=$ro["date"];
     
    						}
     
    					$confirmation_message='Cette activité a été confirmée le '.date_an_fr($dateconfirmation);	
     
    				}
    je dois tester si l'activité a été confirmer et si oui, je prends la date de confirmation.
    voici l'erreur obtenue :
    Warning: mysqli_query() expects at least 2 parameters, 1 given in /customers/a/c/b/nicopack.be/httpd.www/mc/pages_site/activites.php on line 518 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /customers/a/c/b/nicopack.be/httpd.www/mc/pages_site/activites.php on line 521
    Avez-vous une idée du problème ?
    je vous remercie
    Nicolas

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

    1- la VRAI bonne idée aurait été de passer à PDO.

    Car là, tes requêtes ne sont pas préparées.
    Avec mysqli, il faut utiliser au minimum mysqli_real_escape_string().

    2- Pour ton erreur : la syntaxe de certaines fonctions mysqli_ sont différentes de celles de mysql_.

    En l'occurrence ici, mysqli_query() (en style procédural) nécessite 2 paramètres le 2ème est la connexion $conn.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Partons du principe que $conn est l'objet qui représente ta connexion au serveur MySQL (donc tu as quelquepart une ligne du style : $conn = new mysqli($host, $usr, $pwd, $dbname);).

    Laisse tomber le style procédurale (les fonctions mysqli_...) et utilise les méthodes de la classe mysqli (et autres classes associées) à la place, c'est moins verbeux. Évite les imbrications genre mysqli_fetch_array($conn->query($req)) et écrit quelques variables en plus: ça te permettra, armer du manuel PHP, de bien comprendre la nature des éléments que tu manipules.

    Ne jamais introduire de variable directement dans une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = "Select count(*) from confirmations where num_activite='$num_activite'";
    C'est la porte ouverte aux injections SQL. (je propose d'ailleurs de désormais l'écrire en un seul mot: célaportouvertozinjexioneskuel). Tu dois passer par une requête préparée.

    La partie qui consiste à compter les résultats éventuels avant d'obtenir le résultat proprement dit ne sert à rien. À la place balance directement la requête que tu souhaites, et regarde si tu as des résultats.

    Ça donnerait:
    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
    if ( $stmt = $conn->prepare('SELECT `date` FROM confirmations WHERE num_activite=?') ) {
     
        $stmt->bind_param('i', $num_activite); // ou $stmt->bind_param('s', $num_activite); si c'est un bigint
        $stmt->execute();
     
        // On lie la variable $dateconfirmation au résultat de la requête
        $stmt->bind_result($dateconfirmation);
     
        // On récupère le résultat si disponible
        if ( $stmt->fetch() ) {
            $confirmation_message = 'Cette activité a été confirmée le ' . date_an_fr($dateconfirmation);
        } /* else { $erreur_message = 'l\'activité n'a pas été confirmée.'; } */
     
        $stmt->close(); 
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    En ce qui me concerne la migration s’est faite facilement. D’une part, je n’avais pas le temps ni la volonté de reprendre tous mes scripts et d’autre part mes requêtes étaient protégées (*) dans dans la mesure où je n’autorise que des valeurs qui ont une certaine structure (des groupes de chiffres) qui évite toute injection.


    https://www.developpez.net/forums/d1...-mysql-mysqli/

    (*) les paramètres à passer aux requêtes sont contrôlés par une expression régulière.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

Discussions similaires

  1. [MySQL] Passage à php 5.4 chez 1and1
    Par Freedolphin dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/07/2015, 19h15
  2. [PHP 5.3] Problème passage PHP 5.2 -> 5.3 avec fonction iconv()
    Par clement106 dans le forum Langage
    Réponses: 4
    Dernier message: 06/10/2011, 09h49
  3. OVH Serveur dédié, passage à PHP 5
    Par zz_10 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 06/11/2009, 12h45
  4. [POO] Évolution d'un site - passage à PHP 5
    Par filipic dans le forum Langage
    Réponses: 7
    Dernier message: 05/02/2007, 14h24
  5. passage php flash
    Par guitalca dans le forum Flash
    Réponses: 1
    Dernier message: 02/10/2006, 23h56

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