Affichage des résultats du sondage: J'utilise sans réserve PDO

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

    31 63,27%
  • Non, ce n'est pas forcément utile

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

    12 24,49%
+ Répondre à la discussion
Page 1 sur 2 12 DernièreDernière
Affichage des résultats 1 à 20 sur 39

Discussion: Choix de PDO

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

    Par défaut Choix de PDO

    Bonjour à tous,

    Après quelques rencontres avec quelques amis développeurs professionnels ou non, le choix du SGBD semble alimenter encore les discussion le soir prés de la cheminée...

    Mais une chose reste pour moi plus qu'étrange...

    Ainsi, en fonction de chaque SGBD, il existe plusieur façon d'y accéder...

    D'une part en utilisant les fonction lié directement à ce SGBD (cas avec mysql ou postgresql dans PHP que je connais mieux) et avec PDO.

    Ma question est simple (enfin je suppose) : Quel est l'intérêt d'utiliser PDO (je ne sais pas trop ce que c'est en fait) alors que les outils spécifique à chaque SGBD existent ?

    Je complète quand même que mon niveau de compétence reste très limite et que je suis un simple développeur amateur.

    Merci
    Couik

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 008
    Points : 25 263
    Points
    25 263

    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
    955
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 955
    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
    21 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 582
    Points : 31 452
    Points
    31 452

    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
    955
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 955
    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 :
    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 :
    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
    13 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2002
    Messages : 13 767
    Points : 30 504
    Points
    30 504

    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 : 590
    Points
    590

    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 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : août 2003
    Messages : 3 187
    Points : 7 646
    Points
    7 646

    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 252
    Points
    1 252

    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
    21 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 582
    Points : 31 452
    Points
    31 452

    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 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 008
    Points : 25 263
    Points
    25 263

    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 : 30
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •