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 :

Modifier des requêtes MySQLi en requêtes préparées PDO


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut Modifier des requêtes MySQLi en requêtes préparées PDO
    Bonsoir à tous.

    S'il vous plaît j'aimerais transférer mes requêtes MySQLi qui comporte beaucoup de failles SQL. Ne comprenant pas encore très bien le concept des requêtes préparée en PDO, je sollicite votre aide pour m'aider à corriger mon code ci-après afin qu'il soit TOTALEMENT en requêtes préparées PDO:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    <?php
    //branch_list
    <?php
    	$i = 1;
    	$qry = $conn->query("SELECT * FROM branches order by street asc,city asc, state asc ");
    	while($row= $qry->fetch_assoc()):
    ?>
     
    //classes.php
    <?php
    	$i = 1;
    	$qry = $conn->query("SELECT * FROM classes order by level asc, section asc ");
    	while($row= $qry->fetch_assoc()):
    ?>
     
    //edit_branch.php
    <?php
    include 'db_connect.php';
    $qry = $conn->query("SELECT * FROM branches where id = ".$_GET['id'])->fetch_array();
    foreach($qry as $k => $v){
    	$$k = $v;
    }
    include 'new_branch.php';
    ?>
     
    //edit_parcel.php
    <?php
    include 'db_connect.php';
    $qry = $conn->query("SELECT * FROM parcels where id = ".$_GET['id'])->fetch_array();
    foreach($qry as $k => $v){
    	$$k = $v;
    }
    include 'new_parcel.php';
    ?>
     
    //edit_result.php
    <?php
    include 'db_connect.php';
    $qry = $conn->query("SELECT r.*,concat(s.firstname,' ',s.middlename,' ',s.lastname) as name,s.student_code,concat(c.level,'-',c.section) as class FROM results r inner join classes c on c.id = r.class_id inner join students s on s.id = r.student_id where r.id = ".$_GET['id'])->fetch_array();
    foreach($qry as $k => $v){
    	$$k = $v;
    }
    include 'new_result.php';
    ?>
     
    //edit_staff.php
    <?php
    include 'db_connect.php';
    $qry = $conn->query("SELECT * FROM users where id = ".$_GET['id'])->fetch_array();
    foreach($qry as $k => $v){
    	$$k = $v;
    }
    include 'new_staff.php';
    ?>
     
    //edit_user.php
    <?php
    include 'db_connect.php';
    $qry = $conn->query("SELECT * FROM users where id = ".$_GET['id'])->fetch_array();
    foreach($qry as $k => $v){
    	$$k = $v;
    }
    include 'new_user.php';
    ?>
     
    //home.php
    <?php echo $conn->query("SELECT * FROM branches")->num_rows; ?>
     
    <?php echo $conn->query("SELECT * FROM parcels")->num_rows; ?>
     
    <?php echo $conn->query("SELECT * FROM users where type != 1")->num_rows; ?>
     
    <?php echo $conn->query("SELECT * FROM parcels where status = {$k} ")->num_rows; ?>
     
    //index.php
    if(!isset($_SESSION['system'])){
     
        $system = $conn->query("SELECT * FROM system_settings")->fetch_array();
        foreach($system as $k => $v){
          $_SESSION['system'][$k] = $v;
        }
      }
     
    //login.php
    $system = $conn->query("SELECT * FROM system_settings")->fetch_array();
        foreach($system as $k => $v){
          $_SESSION['system'][$k] = $v;
        }
     
    //manage_user.php
    if(isset($_GET['id'])){
    $user = $conn->query("SELECT * FROM users where id =".$_GET['id']);
    foreach($user->fetch_array() as $k =>$v){
    	$meta[$k] = $v;
    }
    }
     
    //new_parcel.php
    <?php 
        $branches = $conn->query("SELECT *,concat(street,', ',city,', ',state,', ',zip_code,', ',country) as address FROM branches");
        while($row = $branches->fetch_assoc()):
    ?>
     
    <?php 
        $branches = $conn->query("SELECT *,concat(street,', ',city,', ',state,', ',zip_code,', ',country) as address FROM branches");
        while($row = $branches->fetch_assoc()):
    ?>
     
    //new_staff.php
    <?php
        $branches = $conn->query("SELECT *,concat(street,', ',city,', ',state,', ',zip_code,', ',country) as address FROM branches");
        while($row = $branches->fetch_assoc()):
    ?>
     
    //parcel_list.php
    <?php
    	$i = 1;
    	$where = "";
    	if(isset($_GET['s'])){
    		$where = " where status = {$_GET['s']} ";
    	}
    	if($_SESSION['login_type'] != 1 ){
    		if(empty($where))
    			$where = " where ";
    		else
    			$where .= " and ";
    			$where .= " (from_branch_id = {$_SESSION['login_branch_id']} or to_branch_id = {$_SESSION['login_branch_id']}) ";
    	}
    	$qry = $conn->query("SELECT * from parcels $where order by  unix_timestamp(date_created) desc ");
    	while($row= $qry->fetch_assoc()):
    ?>
    AIDEZ-MOI S'IL VOUS PLAÎT A TRANSFORMER MON CODE EN REQUÊTES PREPAREES PDO.

    Merci d'avance.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je suppose que tu parles de ces requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $qry = $conn->query("SELECT * FROM branches where id = ".$_GET['id'])->fetch_array();
    Tu pourrais faire des requêtes préparées en mysqli. Mais personnellement, je trouve ça horrible.

    Donc en PDO, en supposant que tu ais fait la connexion plus haut et qu'elle soit stockée dans une variable $pdo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $stmt = $pdo->prepare("SELECT * FROM branches where id = :id");
    $stmt->execute(['id' => $_GET['id']);
    while ($stmt->fetch()) {
    // ... faire quelque chose du résultat
    }

    A lire sur le sujet : PDO une soupe et au lit !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Merci beaucoup pour votre réponse. Seulement, je me demande, comment transformer cette requête-ci qui paraît un peu plus complexe en PDO:

    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
    <?php
    	$i = 1;
    	$where = "";
    	if(isset($_GET['s'])){
    		$where = " where status = {$_GET['s']} ";
    	}
    	if($_SESSION['login_type'] != 1 ){
    		if(empty($where))
    			$where = " where ";
    		else
    			$where .= " and ";
    			$where .= " (from_branch_id = {$_SESSION['login_branch_id']} or to_branch_id = {$_SESSION['login_branch_id']}) ";
    	}
    	$qry = $conn->query("SELECT * from parcels $where order by  unix_timestamp(date_created) desc ");
    	while($row= $qry->fetch_assoc()):
    ?>
    Ceci est là où je calle le plus. AIDEZ-MOI S'IL VOUS PLAÎT.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 402
    Points : 4 837
    Points
    4 837
    Par défaut
    Bonjour,

    Je n'ai pas testé le code, mais ça devrait être comme suite :
    Code php : 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
     
    $where="";
    $execute=[];
    if(isset($_GET['s'])){
    		$where = " where status = :status ";
                    $execute[":status"]=$_GET['s'];
    }
    if($_SESSION['login_type'] != 1 ){
    	if(empty($where)) $where = " where ";
    	else{
    		$where .= " and ";
    		$where .= " (from_branch_id = :branch_id or to_branch_id = :branch_id) ";
                    $execute[':branch_id']=$_SESSION['login_branch_id'];
            }
    }
    $qry = $conn->prepare("SELECT * from parcels $where order by  unix_timestamp(date_created) desc ");
    $qry->execute($execute);
    while($row= $qry->fetch(PDO::FETCH_ASSOC)){
         /* code de la boucle ...*/
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Merci pour votre réponse. Je vais l'essayer. Mais actuellement, j'ai deux problèmes dans le même sens et je sollicite votre aide.

    1 - La requete inittiale (mysqli) suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $system = $conn->query("SELECT * FROM system_settings")->fetch_array();
        foreach($system as $k => $v){
          $_SESSION['system'][$k] = $v;
        }
    Que j'ai essaye de modifier cette requête mysqli ci-dessus en requetes preparees PDO comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $system = $conn->prepare("SELECT * FROM system_settings");
    	$system->execute();
    	$system->fetch(PDO::FETCH_ASSOC);
    	$system->execute();
        foreach($system as $k => $v){
          $_SESSION['system'][$k] = $v;
        }
    et quand j'essaie d'afficher la valeur de la colonne "name" en faisant </b><?php echo $_session['system']['name'] ?> - admin</b>,

    Je reçois l'erreur suivante:
    Notice: Undefined index: name in C:\laragon\www\stamp\login.php on line 26 - Admin


    Aidez-moi a corriger ma requêtepréparée PDO ci-dessus pour réussir à afficher la colonne "name" de la Table "system_settings".


    2 - avec le code ci-apres de mon destructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function __destruct() {
    	    $this->db->close();
    	    ob_end_flush();
    	}
    ,

    Je reçois également l'erreur :

    Fatal error: Uncaught Error: Call to undefined method PDO::close() in C:\laragon\www\stamp\admin_class.php:14 Stack trace: #0 [internal function]: Action->__destruct() #1 {main} thrown in C:\laragon\www\stamp\admin_class.php on line 14
    Aidez-moi egalement a corriger cette erreur s'il vous plaît.

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 402
    Points : 4 837
    Points
    4 837
    Par défaut
    Bonjour,

    Pour la requête SELECT * FROM system_settings, tu n'as pas besoin de la préparer car elle n'utilise aucune variable. donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    session_start();
    $system = $conn->query("SELECT * FROM system_settings");
    $datas=$system->fetchAll(PDO::FETCH_ASSOC);//fetchAll lorsqu'on a plusieurs lignes à récupérer et fetch lorsqu'on a besoin de récupérer 1 seule ligne.
    foreach($datas as $k => $v){
       $_SESSION['system'][$k] = $v;
    }
    $system->closeCursor();//fermer le curseur 
    $conn=null;// détruire l'instance $conn ou bien unset($conn) c'est l'équivalent de __destruct....
    echo "<pre>";
    print_r($_SESSION);
    echo '</pre>';

Discussions similaires

  1. [PDO] La syntaxe des requêtes préparées
    Par Le nettoyeur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/02/2014, 13h44
  2. [PDO] Requête préparée PDO
    Par ben256xp dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 03/06/2013, 09h47
  3. Faire des requêtes préparées avec l'extension mysql
    Par stealth35 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 3
    Dernier message: 03/03/2011, 02h15
  4. Faire des requêtes préparées avec l'extension mysql
    Par stealth35 dans le forum Téléchargez
    Réponses: 1
    Dernier message: 23/02/2011, 10h23
  5. Modifier des requêtes Access avec VBA
    Par vuong1 dans le forum Access
    Réponses: 7
    Dernier message: 02/08/2006, 07h09

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