PDO
Een kort vraagje over PDO. Ik wil gebruik gaan maken van PDO MqSQL versie. Nu meen ik me te herinneren dat die niet standaard in PHP zit (hier is ie gelukig wel aanwezig). Maar wat ik me afvraag... is dit een aparte plugin en kan het dus zo zijn dat deze op bepaalde servers niet aanwezig is?
Ja, via PDO::getAvailableDrivers() kun je kijken welke PDO extensies aanwezig zijn.
okeej, thanks
PDO is geen aanrader, je zult bij bepaalde zaken alsnog de mysqli benodigen!!
Noppes, kun je iets specifieker zijn? Ik hoor alijd dat je PDO moet gebruiken. Waarom raad jij dan mysqli aan?
- PDO is leuk voor de simpele queries en een niet al te ingewikkeld databasemodel -
http://stackoverflow.com/questions/770782/moving-from-mysql-to-mysqli-or-pdo
http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons
http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons
Dankjewel Noppes. Dan ga ik me er nog even in verdiepen. Jaron thanks voor de links! Ik heb weer wat leesvoer begrijp ik... ;)
Duren lange en moeilijke queries in PDO langzamer? Wat is er zo slecht aan PDO dat je er na 1 maal mee bent gestopt?
Je bent een beetje oppervlakkig noppes. Je neemt eerst heel keihard een stelling in die niet zomaar wat is en als je het dan moet uitleggen ben je heel erg vaag en heb je eigenlijk geen redenen. Je gaat slechts alleen nog door om je stelling nog harder te maken en te zorgen dat jou mening goed is, maar echt onderbouwen heb ik nog niet gezien.
Ik zie graag meerdere redenen waarom jij voor MySQLi kiest i.p.v. PDO. Wat voordelen dat ik van PDO vind:
- Met prepered statements kun je in PDO de parameters een naam geven, waardoor het met bindParam het een stuk makkelijker hebt.
- Foutafhandeling met exceptions, dat past veel beter bij de hedendaagse methodes.
- Het voelt meer OO aan vind ik. MySQLi lijkt erop alsof ze alle mysql_* functies direct hebben overgeplaatst in een class genaamd MySQLi.
- Mogelijkheid tot uitbouwen naar een andere db dan MySQL.
Gewijzigd op 17/02/2012 17:21:02 door Wouter J
Verder ben ik wel benieuwd wat voor geavanceerde queries niet met PDO kunnen en MySQLi wel, volgens mij maakt dat geen donder uit. Ook zijn vele ORM/DBAL frameworks op PDO gebaseerd, die ingezet worden voor grote (lees: GROTE) projecten worden ingezet. Ik zie dus geen reden in waarom PDO zo slecht zou zijn.
En daar komen ook nog de voordelen bij zoals Wouter hierboven beschrijft.
Ben jij voor PDO of voor MySQLi?
Stemmen maar...!
PDO +1
Nog meer meningen? Ik hoor ze graag!
Kees Schepers op 17/02/2012 17:50:13:
De reactie van Noppes is natuurlijk veel te kort door de bocht en niet onderbouwd.
So what else is new?
Maar ik kies ook voor PDO. Maar dan wel om de simpele reden dat ik dat als eerste heb geleerd bij mijn overstap naar php en ik tot dusverre nog geen reden ben tegengekomen om in plaats daarvan mysqli te gaan gebruiken. Geen sterke reden dus en ik daag mensen uit om te proberen me over te halen :-)
Maar PDO is naar mijn mening veel meer geoptimaliseerd. Het bevat betere prepared statements en lijkt veel meer op OO. MySQLi lijkt gewoon iets als 'hey, OO programmeren is tegenwoordig in, laten we alle mysql_* functies pakken en die in een class stoppen. Voor het OO gevoel maken we de link_identifier als property van die class, en ohja laten we er nog een slecht prepared statement systeem bij bouwen.'
Let wel op dat ik dit alleen vanuit gebruikersperspectief bekijk, de broncode van MySQLi of PDO heb je ik eerlijk gezegd nog nooit ingekeken.
Noppes Homeland op 17/02/2012 17:09:55:
PDO is te beperkt in de mogelijkheden, je kan lang niet alles wat je met mysqli wel zult kunnen. Specifieker kan ik niet zijn, want na 1 maal er naar PDO gekeken te hebben was ik het al beu.
- PDO is leuk voor de simpele queries en een niet al te ingewikkeld databasemodel -
- PDO is leuk voor de simpele queries en een niet al te ingewikkeld databasemodel -
Dit is naar mijn mening pittig-onzin, ik gebruik PDO voor alle websites i.p.v. Mysqli_* volgens mij is het zelfs to dat in PHP6 mysql en mysqli functies verdwijnen en alleen PDO blijft bestaan als database adapter.
Overigens heeft PDO meer "features" zoals bijv. named parameters in prepare statements. En natuurlijk dat mysqli alleen MySql ondersteund en PDO nog veel meer database-servers.. Zoals bijv. Sql-server.
Zelf zou ik overigens kiezen voor PDO.
1. Het is Object Oriented ($row->koekjes, $row['koekjes'] $query->fetchobject()...)
2. Het ondersteunt meer databases, vooral handig voor open source projects waarmee ikzelf bezig ben. Hierdoor kan je de gebruiker laten kiezen welke database ze willen gebruiken.
3. Er is ooit eens de geruchte geweest dat ze mysql_query en al die andere rommel willen verwijderen uit php6, hoewel ik me dat betwijfel want PDO is pas sinds 5.1.0 ofzo.
4. PDO ondersteunt zeker niet alleen kleine querys, wat een onzin. Waarom zou php.net dan pdo hebben gemaakt?
Ikzelf kan hier genoeg mee hoor, volgensmij heeft mysql_query er niet zoveel als dit:
Quote:
PDO::beginTransaction — Initiates a transaction
PDO::commit — Commits a transaction
PDO::__construct — Creates a PDO instance representing a connection to a database
PDO::errorCode — Fetch the SQLSTATE associated with the last operation on the database handle
PDO::errorInfo — Fetch extended error information associated with the last operation on the database handle
PDO::exec — Execute an SQL statement and return the number of affected rows
PDO::getAttribute — Retrieve a database connection attribute
PDO::getAvailableDrivers — Return an array of available PDO drivers
PDO::inTransaction — Checks if inside a transaction
PDO::lastInsertId — Returns the ID of the last inserted row or sequence value
PDO::prepare — Prepares a statement for execution and returns a statement object
PDO::query — Executes an SQL statement, returning a result set as a PDOStatement object
PDO::quote — Quotes a string for use in a query.
PDO::rollBack — Rolls back a transaction
PDO::setAttribute — Set an attribute
PDOStatement — The PDOStatement class
PDOStatement::bindColumn — Bind a column to a PHP variable
PDOStatement::bindParam — Binds a parameter to the specified variable name
PDOStatement::bindValue — Binds a value to a parameter
PDOStatement::closeCursor — Closes the cursor, enabling the statement to be executed again.
PDOStatement::columnCount — Returns the number of columns in the result set
PDOStatement::debugDumpParams — Dump an SQL prepared command
PDOStatement::errorCode — Fetch the SQLSTATE associated with the last operation on the statement handle
PDOStatement::errorInfo — Fetch extended error information associated with the last operation on the statement handle
PDOStatement::execute — Executes a prepared statement
PDOStatement::fetch — Fetches the next row from a result set
PDOStatement::fetchAll — Returns an array containing all of the result set rows
PDOStatement::fetchColumn — Returns a single column from the next row of a result set
PDOStatement::fetchObject — Fetches the next row and returns it as an object.
PDOStatement::getAttribute — Retrieve a statement attribute
PDOStatement::getColumnMeta — Returns metadata for a column in a result set
PDOStatement::nextRowset — Advances to the next rowset in a multi-rowset statement handle
PDOStatement::rowCount — Returns the number of rows affected by the last SQL statement
PDOStatement::setAttribute — Set a statement attribute
PDOStatement::setFetchMode — Set the default fetch mode for this statement
PDO::commit — Commits a transaction
PDO::__construct — Creates a PDO instance representing a connection to a database
PDO::errorCode — Fetch the SQLSTATE associated with the last operation on the database handle
PDO::errorInfo — Fetch extended error information associated with the last operation on the database handle
PDO::exec — Execute an SQL statement and return the number of affected rows
PDO::getAttribute — Retrieve a database connection attribute
PDO::getAvailableDrivers — Return an array of available PDO drivers
PDO::inTransaction — Checks if inside a transaction
PDO::lastInsertId — Returns the ID of the last inserted row or sequence value
PDO::prepare — Prepares a statement for execution and returns a statement object
PDO::query — Executes an SQL statement, returning a result set as a PDOStatement object
PDO::quote — Quotes a string for use in a query.
PDO::rollBack — Rolls back a transaction
PDO::setAttribute — Set an attribute
PDOStatement — The PDOStatement class
PDOStatement::bindColumn — Bind a column to a PHP variable
PDOStatement::bindParam — Binds a parameter to the specified variable name
PDOStatement::bindValue — Binds a value to a parameter
PDOStatement::closeCursor — Closes the cursor, enabling the statement to be executed again.
PDOStatement::columnCount — Returns the number of columns in the result set
PDOStatement::debugDumpParams — Dump an SQL prepared command
PDOStatement::errorCode — Fetch the SQLSTATE associated with the last operation on the statement handle
PDOStatement::errorInfo — Fetch extended error information associated with the last operation on the statement handle
PDOStatement::execute — Executes a prepared statement
PDOStatement::fetch — Fetches the next row from a result set
PDOStatement::fetchAll — Returns an array containing all of the result set rows
PDOStatement::fetchColumn — Returns a single column from the next row of a result set
PDOStatement::fetchObject — Fetches the next row and returns it as an object.
PDOStatement::getAttribute — Retrieve a statement attribute
PDOStatement::getColumnMeta — Returns metadata for a column in a result set
PDOStatement::nextRowset — Advances to the next rowset in a multi-rowset statement handle
PDOStatement::rowCount — Returns the number of rows affected by the last SQL statement
PDOStatement::setAttribute — Set a statement attribute
PDOStatement::setFetchMode — Set the default fetch mode for this statement
Quote:
volgens mij is het zelfs to dat in PHP6 mysql en mysqli functies verdwijnen en alleen PDO blijft bestaan als database adapter.
Dit heb je dan verkeerd begrepen. De mysql_* functies worden standaard uit gezet in PHP6 (als die ooit gaat komt...) en omdat dat zo is is er de MySQLi class en de PDO class geïntroduceerd.
Ik heb zelf nog een oplossing bedacht die veel CMS systemen gebruiken:
Gebruik standaard PDO, maar laat de gebruiker bepalen welke hij wilt gebruiken. Dit kan hij dan bijv. aanpassen in de config.ini file:
Als je je framework goed in elkaar zet is dit alleen een kwestie van Models aanpassen en dat moet denk ik wel lukken.
Okidoki, thanks voor alle reacties. Het lijkt erop dat PDO toch heeft gewonnen... maar Noppes (of iemand anders) is natuurlijk altijd vrij om zijn mening toe te lichten en de argumenten te noemen waarom hij MySQLi prettiger vindt dan PDO. Tot die tijd is de overwinning in ieder geval voor PDO.
Spamkickslotje