[RESOLU] passer de la fonction mysql_ à PDO

Eléphanteau du PHP | 12 Messages

18 mai 2015, 15:47

salut,

je suis entrain de changer toutes les pages de mon code en les passant à la fonction PDO car mysql_ est obselète et il y a un bout de code que je n'arrive pas. voici le bout de code en question :
<?php

    } else {
      $query ="INSERT INTO user_role
              (
                   DS_ROLE	             ,
                   DESCRIPTION         ,
                   DT_INSERT           ,
                   DF_UTENTE                    
               )   
               VALUES
              (
               
               upper('" . $_POST['ds_role'	               ] . "'),
               '" . $_POST['description'                  ] . "',
                now(),
                '".$_SESSION['user']['username']."'  
                ) " ;
      
      $result = mysql_query($query) 
        or die(mysql_error());
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 mai 2015, 13:59

Bonjour,

Qu'est-ce qui t'embête avec cette requête ? Tu veux passer par un prepare ? tu veux juste exécuter la requête pour insérer le champ en base ?
Quel est ton soucis en fait ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 12 Messages

26 mai 2015, 10:20

je voudrais changer la fonction mysql_query car elle est obselete est on dit ici " L'extension MySQL originale est maintenant obsolète, et génèrera des alertes de niveau E_DEPRECATED lors de la connexion à une base de données. A la place, utilisez l'extension MySQLi ou l'extension PDO_MySQL. " sources : http://php.net/manual/fr/migration55.deprecated.php

donc je voudrais mettre la fonction PDO

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 mai 2015, 11:19

Le plus simple est de remplacer ton appel à mysql_query par un appel à la fonction équivalente de PDO
// instance de PDO et connexion à la bdd à remplacer
$dbh = new PDO('ta_base', 'ton_user', 'ton_pass'); 
// ...
$query ="INSERT INTO user_role ... ";
$result = $dbh->exec($query);
Après tu peux aussi utiliser les requêtes préparées, cela permet de protéger ton code SQL des injections quand ce n'est pas déjà le cas, et d'optimiser les performances pour des insertions ou des updates similaires (en changeant les données, mais pas la structure de la requête) à réaliser :
// la requête est modifiée pour recevoir des paramètres à la volée
$query ="INSERT INTO user_role
              (
                   DS_ROLE	             ,
                   DESCRIPTION         ,
                   DT_INSERT           ,
                   DF_UTENTE                    
               )   
               VALUES
              (
              :role,
              :desc,
              now(),
              :user) " ;

$stmt = $dbh->prepare($query); // on en fait une requête "préparée"
$stmt->execute( // on exécute la requête en spécifiant les paramètres d'exécution
  array(
    ':role' =>  $_POST['ds_role']
    , ':desc' => $_POST['description']
    , 'user' => $_SESSION['user']['username']
);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...