Toon posts:

[PHP] mysql_ vs mysqli_ en PDO

Pagina: 1
Acties:

Onderwerpen


  • Bv202
  • Registratie: oktober 2006
  • Laatst online: 20-09 12:14
Hey,

Tegenwoordig gebruik ik PDO in plaats van mysql_ (na het lezen van artikels als deze, maar als ik zo rondkijk (ook op dit forum) ben ik één van de weinigen.

Het blijkt ook dat dit redelijk normaal gevonden wordt. Vrijwel niemand geeft commentaar op het gebruik van mysql_.

Mijn vraag is dan ook of het gebruik hiervan inderdaad zo slecht is? Is het inderdaad beter PDO/mysqli_ te gebruiken? Zo ja, waarom wordt mysql_ dan nog zo veel gebruikt en geaccepteerd?

  • Lye
  • Registratie: januari 2010
  • Laatst online: 01:32
De mysql functies zitten al in php sinds de vroege (brakkere) jaren, hierdoor is het zo ingeburgerd dat nagenoeg elke php-tutorial hier gebruik van maken. Ook hebben deze functies een minder stijle leercurve dan de OOP-gebaseerde libraries PDO en mysqli. Grootste voordeel van de laatste twee libraries is dat deze prepared statements ondersteunen, iets wat een volwassen database library wel moet ondersteunen, naar mijn mening.

Verder vind ik persoonlijk PDO fijner dan mysqli, maar daar zijn de meningen ook over verdeeld.

  • DataGhost
  • Registratie: augustus 2003
  • Laatst online: 03:02

DataGhost

iPL dev

Omdat praktisch alle tutorials en boeken alleen maar gaan over hoe je PHP en MySQL aan elkaar knoopt en dan niet verder komen dan mysql_query icm mysql_fetch_array. Dan is PDO/mysqli weer heel anders en eng (vooral onbekend), tenminste aannemend dat je op de prepared-statement functionaliteit doelt. Het probleem bij veel web'developers' is dat ze na het lezen van hun boekje weinig meer aan nieuwe kennis opdoen en echte opleidingen op dat gebied zijn nou ook weer niet zo overvloedig aanwezig.

Ik gebruik nu persoonlijk zoveel mogelijk PDO prepared statements, stukje veiliger dan mysql_ en als je het eenmaal doorhebt best makkelijk. PDO is wel in het nadeel ten opzichte van mysqli, aangezien het een paar database-specifieke zaken niet ondersteunt. Nou is mijn gedachte dat toch niet veel mensen die zaken gebruiken maar als je zoiets leest op het moment dat je je keuze nog moet maken neig je wellicht wat sneller naar mysqli. Voordeel van PDO is dan weer dat je relatief makkelijk met andere databases kan praten, de syntax en structuur van de commando's/code is exact hetzelfde, eventueel met uitzondering van wat SQL-dialect maar dat blijf je toch altijd al houden. Wat mij betreft is PDO dan ook de way to go.

  • krvabo
  • Registratie: januari 2003
  • Laatst online: 01:09

krvabo

MATERIALISE!

Tja je moet gebruiken wat het beste is voor een project, en wat zelf je voorkeur heeft.

mysql_ is prima voor non-objectgeöriënteerde stukken code, of een site die geen behoefte heeft aan de wat complexere / uitgebreidere mogelijkheden. In de link die je geeft wordt ook al gesteld dat mysql_ trager is.

PDO is zelf (voor mij) kutter om mee te werken dan mysqli. De echte reden dat ik ben overgegaan op msqli is voor de prepared statements. Ondersteuning voor meerdere databases (PDO) is leuk, maar in een project schrijf je al vrij snel databasespecifieke queries omdat dat nu eenmaal vaak sneller en beter is dan het gebruik van generieke sql, maar dan bijvoorbeeld veel moet afhandelen in je client. Ik noem hier als voorbeeld 'LIMIT' versus 'TOP' versus het ontbreken van deze feature.

Mysqli en PDO ondersteunen beiden prepared statements en mysql niet. Dat is een van de grote redenen om echt over te stappen. Daarnaast zijn ze beiden objectgeöriënteerd, wat overzichtelijker werkt over het algemeen.
Als je geen nut hebt voor prepared statements en je niet naar verschillende type databases wilt connecten dan is er geen echte drang om over te stappen van mysql_. Althans, nog niet ;)

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


  • Bv202
  • Registratie: oktober 2006
  • Laatst online: 20-09 12:14
Hey,

Bedankt voor de reacties :)

Ik heb zelf al enig programmeerervaring en ben bezig aan een "projectje" dat toch wel gericht moet zijn naar de toekomst, dus ik blijf bij PDO :)

Alleen... is er nog enig nut om beginnende PHP'ers mysql_ aan te leren? Het enige voordeel hiervan is blijkbaar dat het voor beginners makkelijker is om te begrijpen, wat imo geen goed argument is. Een andere reden dat ik nog kan verzinnen is dat anderen het nog zoveel gebruiken dat je het ook moet gaan leren om hun code meteen te begrijpen.

Als ik het goed begrijp is het trager, onveiliger, inefficiënter, niet OOP, oud en het wordt ook nog eens standaard weggehaald vanaf PHP6.

[Voor 13% gewijzigd door Bv202 op 22-10-2010 22:42]


  • Webgnome
  • Registratie: maart 2001
  • Laatst online: 22:35
Ik heb zelf nog geen ervaring met pdo ( shame on me ) maar als ik van een aantal sites uit moet gaan dan is het eigenlijk alleen de laagdrempeligheid van mysql_ functies dat ze nog veel gebruikt worden. Helaas zijn volgens mijn in php6 deze functies verdwenen dus zullen mensen wel om moeten naar pdo


offtopic:
todo : eigen projecten voorzien van pdo

Strava, Twitter


  • Cartman!
  • Registratie: april 2000
  • Niet online
Ik gebruik zelf momenteel mysqli via Zend_Db, voor een high performance projectje een tijdje terug bleek dat beter te performen dan pdo_mysql en sindsdien staat ie op mysqli ingesteld. Merk van die switch in code niks, Zend_Db regelt de rest wel voor me.

  • jexus
  • Registratie: maart 2010
  • Laatst online: 26-05-2014
Webgnome schreef op vrijdag 22 oktober 2010 @ 22:57:
Ik heb zelf nog geen ervaring met pdo ( shame on me ) maar als ik van een aantal sites uit moet gaan dan is het eigenlijk alleen de laagdrempeligheid van mysql_ functies dat ze nog veel gebruikt worden. Helaas zijn volgens mijn in php6 deze functies verdwenen dus zullen mensen wel om moeten naar pdo


offtopic:
todo : eigen projecten voorzien van pdo
De mysql_*-functies verdwijnen niet, er zit (nu al) een andere client interface achter: mysqlnd, door de PHP-ontwikkelaars zelf ontwikkeld om zo efficient mogelijk met een MySQL-database te kunnen communiceren.

Verder: ik gebruik zelf al tijden geen MySQL meer, maar voor bijna elk DBMS is er dit soort scheiding binnen PHP, dus het blijft actueel. Het zijn allemaal hulpmiddelen waarmee je uiteindelijk precies hetzelfde kunt doen. Het verschil zit in hoe en waarom. PDO is ideaal voor objectgeorienteerde applicaties (denk aan composition en dependency injection) maar is prima te gebruiken in een procedurele applicatie. Andersom is dit niet zo, je kunt wel een mysql-connectionresource meegeven maar als je het "netjes" wilt doen moet je telkens weer controleren of het wel echt een resource is, enzovoorts.

Ik zou gaan voor mysqli_*, omdat dit krachtiger is (voor MySQL) dan PDO, ik vind de API van PDO sowieso niet zo mooi.

  • ReenL
  • Registratie: augustus 2010
  • Laatst online: 22-03-2015
Je kan natuurlijk ook je eigen wrapper schrijven. Of die van een framework gebruiken (zoals Cartman! aangeeft). Dan kan je altijd nog switchen mocht je bang zijn dat een methode depricated wordt of betere performance haalt.

  • frickY
  • Registratie: juli 2001
  • Laatst online: 22:05
De Mysql-extensie is min of meer deprecated, en Mysqli is zijn opvolger De "i" staat dan ook voor "Improved".
Voornaamste verschil is dat MySQLi verschillende functionaliteiten van de nieuwere Mysql-server versies implementeerd. De "mysql_" functies zou je dus uberhaupt niet meer moeten gebruiken in een moderne omgeving.

  • Webgnome
  • Registratie: maart 2001
  • Laatst online: 22:35
frickY schreef op zondag 24 oktober 2010 @ 19:31:
De Mysql-extensie is min of meer deprecated, en Mysqli is zijn opvolger De "i" staat dan ook voor "Improved".
Voornaamste verschil is dat MySQLi verschillende functionaliteiten van de nieuwere Mysql-server versies implementeert. De "mysql_" functies zou je dus überhaupt niet meer moeten gebruiken in een moderne omgeving.
Wat ik mij wel afvraag. Als deze daadwerkelijk depcrecated zijn, waarom staat dat dan niet als zodanig op php.net?

Strava, Twitter


  • Lye
  • Registratie: januari 2010
  • Laatst online: 01:32
Webgnome schreef op zondag 24 oktober 2010 @ 19:42:
[...]


Wat ik mij wel afvraag. Als deze daadwerkelijk depcrecated zijn, waarom staat dat dan niet als zodanig op php.net?
frickY schreef op zondag 24 oktober 2010 @ 19:31:
De Mysql-extensie is min of meer deprecated, en Mysqli is zijn opvolger De "i" staat dan ook voor "Improved".
Voornaamste verschil is dat MySQLi verschillende functionaliteiten van de nieuwere Mysql-server versies implementeerd. De "mysql_" functies zou je dus uberhaupt niet meer moeten gebruiken in een moderne omgeving.
Ze zijn dus niet zo zeer deprecated, echter wordt wel geadviseerd om mysqli/PDO te gebruiken.

  • frickY
  • Registratie: juli 2001
  • Laatst online: 22:05
MySQLi werkt alleen met Mysql>4.1
Voor versies daarvoor heb je dus nog de 'oude' Mysql-extensie nodig. Die extensie werkt ook prima met >4.1 alleen ontbreekt er dan dus functionaliteit.

In de documentatie staan wel op diverse plaatsen notes zoals
If you are using MySQL versions 4.1.3 or later it is strongly recommended that you use the mysqli extension instead.
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee