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 :

Comment modifier les requêtes MYSQL_QUERY et MYSQL_FETCH_OBJ en PDO::prepare dans mon Cas ?


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 Comment modifier les requêtes MYSQL_QUERY et MYSQL_FETCH_OBJ en PDO::prepare dans mon Cas ?
    Bonjour.

    Mon Code ci-dessous (est un code que j'ai pris sur un site pour ajouter à mon APP PHP en développement) contient des requêtes MYSQL_QUERY et MYSQL_FETCH_OBJECT qui sont aujourd'hui obsolètes. Et donc, je souhaiterais utiliser des Requêtes REPAREES 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
    <?php
     
    function balanceEnquiry($pin,$phone){
     
    $balance = "Select * from accountDetails where mobile = '$phone'";
     
    $result = mysql_query($balance);
     
        $response = "Available cash:";
        $balanceObject = mysql_fetch_object($result);
     
        $response = $response." Balance: ".$balanceObject->balance;
     
        return $response;
     
    }
     
    function viewStatements($pin,$phone){
     
     
    $statement = "Select * from Activities ac, accountDetails acc where ac.accountNo = acc.accountNo and mobile= '$phone'";
     
    $result = mysql_query($statement);
     
        $response = "Activities Done for the Account:";
     
        while($statementObject = mysql_fetch_object($result)){ 
     
     
    $response = $response."Account Number: ".$statementObject->accountNo." |Activity Type:".$statementObject->activityType." |Amount:".$statementObject->Amt." |Activity DateTime:".$statementObject->activityDateTime;
     
     
        return $response;
     
        }
        }
     
    function Transfer($pin,$phone,$accNo,$amt){
     
    $sql= "SELECT * FROM  accountDetails where mobile=$phone";
    $result = mysql_query($sql);
    while($row = mysql_fetch_object($result)){
        $accNo1 = $row->accountNo;
    }
    $Type = "Funds Transfer";
     
    $insertbal1 = "insert into Activities(accountNo,pin,Amt,activityType) values ('$accNo1','$pin',$amt *-1,'$Type')";
     
    $sqlupdate1="UPDATE accountDetails set balance = balance-$amt where mobile='$phone'";
     
    $insertbal2 = "insert into Activities(accountNo,pin,Amt,activityType) values('$accNo','$pin','$amt','$Type')";
     
    $sqlupdate2="UPDATE accountDetails set balance = balance+$amt where mobile='$phone'";
     
        if((mysql_query($insertbal1)) && (mysql_query($insertbal2))){
     
            mysql_query($sqlupdate1);
     
            mysql_query($sqlupdate2);
     
            return "Your transfer has been updated with ".$amt."  successfully.";
        }
        else
        {
            return "Sorry, Account cant be updated";
        }
    }
     
    function Withdraw($pin,$phone,$accNo,$amt){
     
    $sql= "SELECT * FROM  accountDetails where mobile=$phone";
    $result = mysql_query($sql);
    $Type = "withdraw";
    $insertbal = "insert into Activities(accountNo,pin,Amt,activityType) values ('$accNo','$pin',$amt *-1,'$Type')";
     
    $sqlupdate = "UPDATE accountDetails set balance = balance-$amt where mobile='$phone'";
    if(mysql_query($insertbal)){
           mysql_query($sqlupdate);
     
     return "You have withdrawn. ".$amt." from your account";
     }
     else
        {
            return "Sorry, Cant withdraw";
     
     }
    }
     
    function Deposit($pin,$phone,$accNo,$amt){
     
    $sql= "SELECT * FROM  accountDetails where mobile=$phone";
    $result = mysql_query($sql);
    $Type = "Deposit";
    $insertbal = "insert into Activities(accountNo,pin,Amt,activityType) values ('$accNo','$pin',$amt,'$Type')";
    $sqlupdate = "UPDATE accountDetails set balance = balance+$amt where mobile='$phone'";
        if(mysql_query($insertbal)){
           mysql_query($sqlupdate);
     
    return "You have Deposited. ".$amt." to your account";
    }
    else
        {
            return "Sorry, Cant Deposit";
     
    }
    }
    ?>
    Aidez-moi s'il vous plaît à transformer au moins deux (2) fonctions dans mon Code ci-dessus (surtout la fonction Transfer et Withdraw) en PDO avec des Requêtes PRÉPARÉES (PDO::prepare) pour que je puisse me servir d'exemples pour me permettre de pouvoir modifier moi-même de mon Code car je suis un peu perdu.

    NB: Il faut dire que le Code devait normalement contenir un "include" qui fait appel au fichier de connexion de la BDD (connect.php par exemple) avec un appel de la variable global $bdd.

    Merci de m'aider s'il vous plaît pour modifier les fonctions fonction Transfer et Withdraw (ligne 38 et 69) pour l'adapter aux Requêtes Préparées PDO.

    Merci.

  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
    Tu peux commencer par lire le mini-tuto PDO une soupe et au lit ! et son grand frère : Comprendre PDO, histoire d'avoir les bases théoriques.

    Pour faire simple, le principe est de mettre des marqueurs là où tu voudras mettre les valeurs et les renseigner lors de l'exécution.

    Ce qui donnerait quelque chose comme ça pour ta fonction de transfert :
    Pour la récupération de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // marqueur pour $phone
    $sql = "SELECT * FROM  accountDetails where mobile=:phone"; 
    $stmtSelect = $bdd->prepare($sql);
    // Exécution avec la valeur de $phone
    $result = $stmtSelect->execute([':phone' => $phone]);
    while($row = $result->fetchObject()){
        $accNo1 = $row->accountNo;
    }
    Ce qui est bien avec les requêtes préparées, c'est qu'on peut exécuter la même requête avec des paramètres différents :
    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
    // requête d'insertion 
    $stmtInsert = $bdd->prepare("insert into Activities(accountNo, pin, Amt ,activityType) values (:accountNo, :pin, :amt, :type)");
     
    // 1ere insertion
    $retourInsert1 = $stmtInsert->execute([':accountNo' => $accNo1, ':pin' => $pin, ':amt' => $amt *-1, ':type' => $Type]);
     
    // 2e insertion
    $retourInsert2 = $stmtInsert->execute([':accountNo' => $accNo1, ':pin' => $pin, ':amt' => $amt , ':type' => $Type]);
     
    if ($retourInsert1 && $retourInsert2) {
        // requête d'update 
        $stmtUpdate = $bdd->prepare("UPDATE accountDetails set balance = balance + :amt where mobile = :phone");
        // 1er update
        $stmtUpdate->execute([':amt' => $amt*-1, ':phone' => $phone]);
        // 2e update
        $stmtUpdate->execute([':amt' => $amt, ':phone' => $phone]);
     
    }
    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
    Citation Envoyé par Celira Voir le message
    Ce qui est bien avec les requêtes préparées, c'est qu'on peut exécuter la même requête avec des paramètres différents :
    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
    // requête d'insertion 
    $stmtInsert = $bdd->prepare("insert into Activities(accountNo, pin, Amt ,activityType) values (:accountNo, :pin, :amt, :type)");
     
    // 1ere insertion
    $retourInsert1 = $stmtInsert->execute([':accountNo' => $accNo1, ':pin' => $pin, ':amt' => $amt *-1, ':type' => $Type]);
     
    // 2e insertion
    $retourInsert2 = $stmtInsert->execute([':accountNo' => $accNo1, ':pin' => $pin, ':amt' => $amt , ':type' => $Type]);
     
    if ($retourInsert1 && $retourInsert2) {
        // requête d'update 
        $stmtUpdate = $bdd->prepare("UPDATE accountDetails set balance = balance + :amt where mobile = :phone");
        // 1er update
        $stmtUpdate->execute([':amt' => $amt*-1, ':phone' => $phone]);
        // 2e update
        $stmtUpdate->execute([':amt' => $amt, ':phone' => $phone]);
     
    }
    Merci Celira pour votre réponse mais il y a quelque chose que je ne comprends pas dans l'exemple que vous veniez de me donner.

    C'est au toujours au niveau de la Fonction Transfer (ligne 38) principalement au niveau des Requêtes update que vous m'aviez donné comme exemple.
    Dans le Code initial (le mien) que j'ai présenté, il y a deux Requêtes update dont la première faire un balance + $amt ET la seconde le contraire c'est à dire balance - $amt mais dans celui de votre exemple, je ne vois qu'une seule requêtes préparée update qui fait un balance + $amt dans la variable
    $stmtUpdate.

    Alors qu'il s'agit d'une transaction et donc dans une transaction, il y a un compte qui est débité et l'autre crédité, je me demande pourquoi dans votre exemple les requêtes UPDATE ne sont pas réunies puisque je ne vois que celle qui est credité (balance + $amt) et pas celle qui est débité (balance - $amt) ???

    Merci de m'expliquer svp.

  4. #4
    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
    En fait, j'ai appliqué pour les requêtes d'update le même principe que pour les requêtes d'insertion : on exécute une fois la requête avec "$amt" et une fois avec "$amt*-1" (car balance+(-12), c'est pareil que balance - 12)
    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]

  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
    Citation Envoyé par Celira Voir le message
    En fait, j'ai appliqué pour les requêtes d'update le même principe que pour les requêtes d'insertion : on exécute une fois la requête avec "$amt" et une fois avec "$amt*-1" (car balance+(-12), c'est pareil que balance - 12)
    OK, je vois. Grand merci.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/04/2018, 11h16
  2. Modifier les requètes DNS au fil de l'eau ? Comment faire.
    Par Devjfc dans le forum Architecture
    Réponses: 0
    Dernier message: 30/05/2017, 15h41
  3. Réponses: 5
    Dernier message: 09/09/2010, 08h24
  4. Réponses: 10
    Dernier message: 13/04/2008, 16h27
  5. Comment modifier les .pas fournis avec Delphi ?
    Par prgasp77 dans le forum Langage
    Réponses: 2
    Dernier message: 09/02/2005, 15h12

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