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

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

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

    39 67,24%
  • Non, ce n'est pas forcément utile

    6 10,34%
  • Des fois oui, des fois non, en fonction des cas

    13 22,41%
PHP & Base de données Discussion :

Utilisez-vous PDO ?


Sujet :

PHP & Base de données

  1. #1
    Community Manager

    Profil pro
    Inscrit en
    Avril 2014
    Messages
    4 207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2014
    Messages : 4 207
    Points : 13 060
    Points
    13 060
    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 ?
    Pour contacter les différents services du club (publications, partenariats, publicité, ...) : Contacts

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 792
    Points : 34 016
    Points
    34 016
    Billets dans le blog
    14
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    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
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    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 bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 716
    Points : 52 380
    Points
    52 380
    Billets dans le blog
    4
    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
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Points : 231
    Points
    231
    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 confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    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 habitué Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Points : 190
    Points
    190
    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
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 690
    Points : 20 211
    Points
    20 211
    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 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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 expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    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
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 792
    Points : 34 016
    Points
    34 016
    Billets dans le blog
    14
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 73
    Points : 53
    Points
    53
    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. [PDO] INSERT de choix multiples en pdo
    Par speedylol dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 16/03/2015, 22h57
  2. [Choix] Quelles attentes par rapport aux SGBD ?
    Par thierry34 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 13/07/2002, 21h08
  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, 09h52
  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, 16h23
  5. Choix d'un ORB
    Par Anonymous dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 12h15

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