Affichage des résultats du sondage: Utilisez-vous PDO ?

Votants
50. Vous ne pouvez pas participer à ce sondage.
  • Oui, c'est pratique et performant

    31 62,00%
  • Non, ce n'est pas forcément utile

    6 12,00%
  • Des fois oui, des fois non, en fonction des cas

    13 26,00%

Discussion: Utilisez-vous PDO ?

  1. #1
    Community Manager

    Avatar de Lana.Bauer
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    novembre 2012
    Messages
    5 277
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : novembre 2012
    Messages : 5 277
    Points : 10 913
    Points
    10 913

    Par défaut Utilisez-vous PDO ?

    Bonjour à tous,

    Le choix du SGBD semble alimenter encore les discussion le soir près de la cheminée. Mais en plus de ce choix parfois cornélien, il existe plusieurs façons d'accéder à chaque SGBD. D'une part en utilisant les fonction liées directement à ce SGBD (par exemple mysql, mysqli, postgresql), et d'autre part avec PDO.

    Quel est l'intérêt d'utiliser PDO alors que les outils spécifique à chaque SGBD existent ?

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    14 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 14 605
    Points : 28 136
    Points
    28 136

    Par défaut

    m'a emmené vers un article intitulé PDO, l'abstraction de données pour PHP 5.

    Après cette lecture, et sans avoir essayé encore l'outil, je dirais que si ton application ne se servira que d'un seul SGBD, PDO n'est peut-être pas indispensable.
    Mais si par contre tu souhaites que ton application reste valable quelle que soit la base de données qu'il y a derrière, ça semble intéressant.

    Ce n'est pas expliqué dans l'article mais je suppose que PDO traduit des requêtes SQL pur en subtilités propres aux SGBD ?
    Je pense par exemple à AUTO_INCREMENT qui existe en MySQL mais pas en PostgreSQL ni je crois en Oracle ou en SQL Server.

    Je ne sais pas s'il est capable de se débrouiller à traduire le MySQL GROUP_CONCAT en une requête donnant le même résultat dans d'autres SGBD.

    A explorer.

    Mais je crois que tu viens de lancer un débat qui promet d'être animé !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Invité1
    Invité(e)

    Par défaut

    Bonjour,

    Merci de cette réponce

    En effet, cela correspond à ce que je pensais. A savoir qu'en fonction du type d'application et de la supposition d'utilisation de divers SGDB, le PDO peut à priori être intéressant...

    Concernant mon application, il n'y aura que l'utilisation de Postgresql.

    Néanmoins, je reste septique quant à l'opportunité de l'utilisation du PDO. Il me semble bon de souligner qu'il faille indiquer aux fonctions PDO quel SGBD est utilisé... De ce fait, les lignes de code concernées s'en trouvent bien sur modifiées...

    N'est-il donc pas plus indiqué de créer des fonctions ou mieux des class type qui en fonction du SGBD utilisé seraient chargées ou non. Dans ce cas, le code principal serait alors identique et seul celui concernant le SGBD serait lui adapté...

    Mais peut-être les utilisateurs de PDO pourraient apporter leurs arguments car pour l'instant, si je comprends mieux le rôle du PDO, je reste très septique quant à son véritable intérêt... D'autant comme l'indique justement CinePhil, certains SGDB permettent certains traitement et pas d'autres...

    Voilou, à vos claviers

    Couik

    PS : dommage, je n'ai pas tilté assez tôt, un sondage aurait été aussi instructif pour connaitre l'orientation général des développeurs...

  4. #4
    mon_nom_est_personne
    Invité(e)

    Par défaut

    perso je n'utilise plus que pdo pour 3 raisons:
    - un standard, que l'on veuille ou non ca l'est devenue.
    - flexible, la migration d'une bdd a une autre ce fait rapidement (perso je prefere quand meme recrire les requetes)
    - le systeme de prepare, execute et fetchAll qui sont tout ce que j'attendais (surtout fetchAll) en standard.

  5. #5
    Invité1
    Invité(e)

    Par défaut

    Je comprends effectivement les raisons

    Mais d'une bdd à une autre, il y a des variations quant aux possibilités de gestion des données ou aux capacité des bdd
    Est-ce à dire alors qu'en utilisant PDO, on se cantonne dans des limites imposées en éliminant de ce fait certains avantage d'offre certaine bdd ?

    Car on peut supposer que je choix d'une bdd répond à un cahier des charges tant concernant les prix que les performances

  6. #6
    mon_nom_est_personne
    Invité(e)

    Par défaut

    Le problème c'est qu'un projet on sais toujours ou il commence jamais ou il finit.
    Prenons deux ca de figure possible (dont un que j'ai vécu):
    - le client se fait embobiner par un commercial de la société A et décide donc d'utiliser leur bdd (ou pire de passer d'un environement linux a une plateforme windows). Et bien crois moi t'es content que les transactions, executions et fetching soient gérées par appel de méthode standard.
    - la solution bdd disparait du marché

    Il y a aussi un avantage conceptuel et structurel, tu peux enfin représenter ton modèle dans ton appli php (je sais les adodb etc.. mais franchement ...)

  7. #7
    Membre Expert
    Inscrit en
    septembre 2007
    Messages
    953
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 953
    Points : 1 068
    Points
    1 068

    Par défaut

    Standard:
    - Parceque tu n'as besoin d'apprendre une nouvelle librarie à chaque fois que tu changes de base de données.
    - De même quand tu veux partager des codes sources PDO facilite la compréhension et l'intégration pour les autres.

    Migration de base possible.

    Fonctionnalités avancées:
    - Gestion des Procédures stockées natives.
    - Gestion des transactions (propose une émulation si la base ne le gère pas)


    Mais d'une bdd à une autre, il y a des variations quant aux possibilités de gestion des données ou aux capacité des bdd
    Est-ce à dire alors qu'en utilisant PDO, on se cantonne dans des limites imposées en éliminant de ce fait certains avantage d'offre certaine bdd ?
    Tu peux peut-être trouver des cas super spécifiques où il vaudra mieux passer par la librairie de la base plutôt que PDO mais je n'en ai jamais rencontrés. Dans ce cas tu peux toujours créer une class qui s'occupe de ces cas.

    Car on peut supposer que je choix d'une bdd répond à un cahier des charges tant concernant les prix que les performances
    Tu peux ajouter facilité de maintenance du code.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    23 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 23 889
    Points : 35 127
    Points
    35 127

    Par défaut

    Le desavantage de PDO actuellement c'est quand même la performance (au moins par rapport aux extensions mysql).

    L'utilisation multi-base est quand même tout a fait relative, les SGDB ayant des syntaxes SQL propres.

  9. #9
    Membre Expert
    Inscrit en
    septembre 2007
    Messages
    953
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 953
    Points : 1 068
    Points
    1 068

    Par défaut

    Citation Envoyé par sabotage Voir le message
    Le desavantage de PDO actuellement c'est quand même la performance (au moins par rapport aux extensions mysql).
    A priori PDO serait plus lent cependant j'ai fait un benchmark pour en avoir le coeur net et je trouve les memes résultats entre PDO et Mysqli. Est-ce que la derniere version de PDO a été optimisé?

    Mon test consistait a appeler x fois le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	    $pdo = new PDO("mysql:host=localhost;dbname=test;","webadmin","password");
     
    		$sth = $pdo->prepare("INSERT INTO `article` (title, description, created_at, updated_at) VALUES (?, ?, NOW(), NOW()) ");
    		$sth->bindValue(1, $title, PDO::PARAM_STR);
    		$sth->bindValue(2, $description, PDO::PARAM_STR);
    		$sth->execute();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	    $mysqli = new mysqli("localhost", "webadmin", "password", "test");
     
    		$stmt = mysqli_prepare($mysqli, "INSERT INTO `article` (title, description, created_at, updated_at) VALUES (?, ?, NOW(), NOW()) "); /* Query 1 */
    		mysqli_stmt_bind_param($stmt, "ss", $title, $description);
    		mysqli_stmt_execute($stmt);
    		mysqli_stmt_close($stmt); // CLOSE $stmt

    J'ai fait aussi des tests avec des selects aleatoires sur une tables de 10000 entrées, j'ai la aussi les memes résultats :-|

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL
    Inscrit en
    mai 2002
    Messages
    14 541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert SGBDR & SQL
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 14 541
    Points : 32 250
    Points
    32 250

    Par défaut

    Ce n'est pas expliqué dans l'article mais je suppose que PDO traduit des requêtes SQL pur en subtilités propres aux SGBD ?
    Je pense par exemple à AUTO_INCREMENT qui existe en MySQL mais pas en PostgreSQL ni je crois en Oracle ou en SQL Server.
    Que d'horreur :
    Les auto incréments existent depuis la norme SQL:2003 qui, comme son nom l'indique date de 2003. Elle précise que les deux éléments d'auto incrémentation sont IDENTITY propre à une seule colonne d'une table et les SEQUENCE indepandant des tables.

    Lisez mon livre SQL il y a une partie de chapitre la dessus.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
    http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  11. #11
    Membre actif Avatar de albedo0
    Profil pro
    Inscrit en
    février 2007
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : février 2007
    Messages : 224
    Points : 176
    Points
    176

    Par défaut

    Personnellement l'utilisation de PDO me semble indispensable, pour la portabilité du projet...

    Les requêtes préparées sont très utiles et (il me semble) sont carrément performantes dans le cas de traitement par lot...

    Cela reste un avis d'un utilisateur éclairé, mais pas expert qui va d'ailleurs de ce pas poster un message au sujet d'un problème avec PDO...

  12. #12
    Membre expérimenté
    Avatar de FMaz
    Inscrit en
    mars 2005
    Messages
    649
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 649
    Points : 593
    Points
    593

    Par défaut

    Mais les requêtes prepared, je trouve que c'est très rare que je les utilisent plus d'une fois. Particulièrement dans le cas de code orienté objet.

    En fait, les seuls moment ou je m'en suis servi s'était pour insérer plusieurs champs. C'est à dire un insert dans une boucle.

    Malgré tout, l'utilisation de prepare permet d'utiliser bindValue (ou param), ce qui assure la sécurité du contenu face aux injections SQL.

    Pour répondre à la question, j'utilise maintenant PDO dans tous mes projets, du fait que ca va devenir un standard.

  13. #13
    Membre actif Avatar de php_de_travers
    Inscrit en
    juin 2004
    Messages
    461
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 461
    Points : 158
    Points
    158

    Par défaut

    Malgré le manque de documentation pour débutant et la difficulté de débugger, PDO est devenu mon seul mode de travail de PHP avec BDD : msql et sqlite.

    Le caractère assez sécurisé des procédures évitant les mysql_real_escape et compagnie, l'évolution possible en tant que standard de développement pour php6, etc... m'ont aidé à faire l'effort.

  14. #14
    Invité1
    Invité(e)

    Par défaut

    Il me semble à vous lire que cela permet bien sur la portabilité (enfin là, cela dépend de la réelle nécéssité) mais surtout, je note l'aspect de la sécurité

    Quant aux requêtes préparées, je ne maitrise pas

    Donc au boulot, je regarde

    L'avis d'autres lecteurs/utilisateurs peut permettre aussi d'en apprendre plus

    Merci à tous
    Couik

  15. #15
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    3 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 3 442
    Points : 8 252
    Points
    8 252

    Par défaut

    Citation Envoyé par couik Voir le message
    mais surtout, je note l'aspect de la sécurité
    Attention tout de même, PDO n'est pas plus sure qu'une autre extension sql. En revanche elle permet d'accéder très facilement aux requêtes préparées et propose quelques fonctions d'échappement qui , en effet, sont un plus indéniable pour la sécurité.
    Pry Framework php5

  16. #16
    Invité1
    Invité(e)

    Par défaut

    Bonjour,

    Rien n'est sur à 100%

    Certaines serrures se forcent en poussant fortement la porte, d'autre suppose quelques petits outils pour crocheter ces sérrures et enfin d'autres demandent patience, outillage lourd et compétente...

    L'objectif et bien sur de retarder et surtout de compliquer au possible les crocheteurs de serrures...

    Si PDO permet en l'utilisant convenablement de retarder un peu plus les hackers de tout poil, c'est déjà un plus non négligeable

    Pour le reste de la sécurité, là, beaucoup d'encre sur le sujet et beaucoup de claviers usés pour en discuter

    Mais une chose est sûre : se croire à l'abri, c'est dire "venez, entrée libre"

  17. #17
    Membre Expert
    Avatar de Rakken
    Inscrit en
    août 2006
    Messages
    1 255
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 1 255
    Points : 1 256
    Points
    1 256

    Par défaut

    Alors moi j'ai un très très gros bémol sur PDO.
    Interoppérabilité, toussa toussa, je veux bien, mais si l'outil est fini.
    J'ai eu a m'en servir il y a trois ans pour migrer un site de mysql vers oracle, ca a été une horreur sans nom (et je pèse mes mots).

    Dans certaines configurations (genre un select, suivi d'un insert sur telle ou telle table...), j'ai même obtenu des "segmentations faults", en php... J'ai mis des jours à trouver. Mon code était bon, mais une fois sur dix, page blanche à la place de l'affichage du site.

    Si on ajoute à ca que le sql entre les différentes bases est aussi semblable que... du java et du javascript (c'est pareil, y a écrit java des deux cotés ), on peut jeter toute idée d'interopérabilité.

    Pour reprendre l'idée d'auto incrément, si on crée sa base directement en php (pour un script d'install par exemple), on ne dit pas "Voila ma table, tel et tel champ de tel type, avec le premier en auto incrément => génère moi le code sql et execute".
    Non, PDO founit juste des méthodes du genre "executeSql" (ce n'est pas forcement ce nom là, je n'ai plus tout en tête) et ca execute ton sql sur la base, au lieu d'utiliser un mysql_execute ou un oci8_execute.
    N'empeche que si le sql a été développé genre en mysql, il y a de très forte chance que le jour ou il sera lancé sur une base oracle, ca se vautre, pdo ou pas (en gros dès que c'est plus compliqué que "select * from table", et encore, si le nom de table fait plus de 30 caractères, c'est mort).

    Bref PDO, n'offre quasiment rien de plus en tant qu'interopérabilité, et a été en partie abandonné.

    Alors autant je peut comprendre l'intérêt de mettre une couche entre l'appel direct des fonctions "mysql_xxx" ou "oci8_xxx" et le code métier, autant utiliser PDO et présenter ca comme la panacée, je dis non.
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    23 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 23 889
    Points : 35 127
    Points
    35 127

    Par défaut

    Bref PDO, n'offre quasiment rien de plus en tant qu'interopérabilité, et a été en partie abandonné.
    Il n'est pas abandonné puisqu'il est mis en avant dans PHP6.

    Pour les bugs c'est bien possible, il y a aussi dans les anciennes extensions.

    Pour l'interoperabilité, on en est par contre effectivement loin ; la construction du code pouvant dependre de ce qu'on peut obtenir d'une requete selon le moteur.

  19. #19
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    14 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 14 605
    Points : 28 136
    Points
    28 136

    Par défaut

    J'essaie de me mettre à PDO et je me demande si ça vaut le coup que je continue...

    Portabilité ?
    D'après ce que j'ai pu lire, elle est très relative, à cause des particularités du langage SQL implémenté par chaque SGBD.
    En plus je n'en ai pas besoin puisque c'est pour une application personnelle.

    Performance ?
    D'après ce que j'ai pu lire également, il semblerait que PDO puisse être nuisible à la rapidité de l'application.
    Pour le moment, ce ne sera sûrement pas sensible dans mon appli mais à terme, j'aurai potentiellement des dizaines de milliers de lignes dans 27 tables, voire davantage.

    Facilité ?
    Je me disais que d'avoir des classes toutes faites pour gérer le dialogue avec la BDD pourrait me faciliter la vie.
    J'ai trouvé aujourd'hui sur DVP une autre extension de PDO qui permettrait semble t-il de combler un manque pour débugguer les requêtes (je ne l'ai pas encore essayé), alors qu'avec la méthode traditionnelle, un simple echo $requete donne la requête réellement envoyée au serveur.

    Faut-il donc que je persiste à comprendre comment fonctionne ce foutu machin parce que c'est l'avenir PHP6 ou autre raison fondamentale, ou existe t-il une classe d'accès à une BDD Postgresql plus simple que PDO ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  20. #20
    Nouveau Membre du Club
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : juillet 2007
    Messages : 73
    Points : 32
    Points
    32

    Par défaut

    Bonjour, tout le monde
    Apres lecture de ce forum, je me posais certaines question moi aussi

    Déja, peut on utiliser une transaction et un prepare ? autrement dit un prepare dans une transaction ?

    Pour l'extension que CinePhil fait reference, quelqu'un a testé, est-bien utile ?

    Avec PDO, doit-on tout de meme mettre des mysql_real_escape ou des "$pattern = '`('.preg_quote("".$param["parameter"]).')([\s]{0,}[,]{0,})`i';" comme fait dans l'extension ?

    Sur un gros projet, je vais devoir utiliser du MySQL,DB2,LDAP, donc je pensais prendre PDO pour MySQL, db2cli pour db2 et l'autre module pour ldap ( j'ai zaper le nom ), ai-je des risques de perdre en performance avec le pdo sachant que je gere des tables qui varie de 10 a 1 000 000 de nuplets! lol

    Merci d'avance

Discussions similaires

  1. INSERT de choix multiples en pdo
    Par speedylol dans le forum PDO
    Réponses: 21
    Dernier message: 16/03/2015, 21h57
  2. [Choix] Quelles attentes par rapport aux SGBD ?
    Par thierry34 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 13/07/2002, 20h08
  3. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52
  4. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23
  5. Choix d'un ORB
    Par Anonymous dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h15

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