PHP 5 Object Oriented Marcus Börger James Cox php|cruise 2004.
Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object...
Transcript of Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object...
![Page 1: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/1.jpg)
Advanced Object Oriented Database access using PDO
Marcus Börger
ApacheCon EU 2005
![Page 2: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/2.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 2
IntroPHP and Databases
PHP 5 and PDO
![Page 3: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/3.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 3
PHP 4 and DatabasesPHP can connect to all important RDBMS
Each RDBMS needs a separate extensionEach extension has a different interface
ext/dbx is an inefficient abstraction
Multiple PEAR solutionsAbstraction layersQuery buildersData Access Objects . . . Nested Set support
But there is ‘no’ OO in PHP 4
PHP can connect to all important RDBMS
Each RDBMS needs a separate extensionEach extension has a different interface
ext/dbx is an inefficient abstraction
Multiple PEAR solutionsAbstraction layersQuery buildersData Access Objects . . . Nested Set support
![Page 4: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/4.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 4
PHP 5 and DatabasesPHP can connect to all important RDBMSPDO provides a unified efficient abstractionPHP is ready for UMLSpecialized extensions allow detailed controlMultiple PEAR solutions
More sophisticated abstraction layersQuery buildersData Access Objects . . . Nested Set support
Multiple ways of using databases with PHPFile based as ext/dba or ext/sqlite or embedded MySQLTalking SQL with embedded RDBMSTalking SQL with external RDBMSUsing ODBC
![Page 5: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/5.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 5
Dedicated Host
BrowserBrowser
BrowserBrowser
BrowserBrowserBrowser
InternetApache
mod_php
database extension
SQL
![Page 6: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/6.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 6
ISP/Shared Host
BrowserBrowser
BrowserBrowser
BrowserBrowserBrowser
InternetApache
mod_php
database extension
SQL
![Page 7: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/7.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 7
Embedded
GTK / ???
CLI / EMBED
dba / dbase
NO SQL
![Page 8: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/8.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 8
Embedded
GTK / ???
CLI / EMBED
database extension
SQL
MySQLiSQLite (PDO)
![Page 9: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/9.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 9
PHP and DatabasesPHP can connect to all important RDBMs
OraclePostgreSQLMySQLInterbase/FirebirdODBCSQLiteMS-SQLmSQL
DBM-style databases
Support for native XML database available using XQL
All talk some SQL dialect
and
All using different API
![Page 10: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/10.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 10
PHP and DatabasesPHP can connect to all important RDBMs
Oracle PDO & native (pc)PostgreSQL PDO & native (pc)MySQL PDO & native (pc/oo)Interbase/Firebird PDO & native (pc)ODBC PDO & native (pc)SQLite PDO & native (pc/oo)MS-SQL PDO & native (pc)mSQL native (pc)
DBM-style databases
Support for native XML database available using XQL
![Page 11: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/11.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 11
PDO at a glanceData access abstraction (API unification)Multiple database plug-in extensionsObject orientedIterator supportDestructive read supportAll written in a tiny c layerWill be used us base layer of upcoming MDB2Available through PECL
Buildable for PHP 5.0Built-in starting from 5.1Windows DLLs availableAlready used in a few production serversATM still marked experimental
![Page 12: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/12.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 12
PDO at a glancePrepared statements (unified, name and index)SQL state error codePortability attributesTransaction supprtScrollable cursorsUses normal PHP error facilities or Exceptions
Plans:LOB support
![Page 13: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/13.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 13
Connecting to the databasePDO uses DSNs to connect
<handler-name> ':' <native-DSN>
try {$dbh = new PDO($dsn, $user, $password, $options);//// Use the database// // and close it$dbh = NULL;
} catch (PDOException $e) {echo "Failed to connect:" . $e->getMessage();
}
![Page 14: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/14.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 14
PDO DSN formatodbc:odbc_dsnmysql:host=name;dbname=dbnamesqlite:/path/to/db/file sqlite::memory: sqlite2:/path/to/sqlite2/file pgsql:host=localhost port=5432 dbname=testoci:dbname=dbname;charset=charsetfirebird:dbname=db;charset=charset;role=role
![Page 15: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/15.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 15
Direct SQL executionPDO::exec() allows to avoid PDOStatement object
Most usefull for DDL (i.e. CREATE) and INSETR, UPDATE
$dbh = new PDO($dsn);$cnt = $dbh->exec($sql);if ($cnt !== false) {
echo "Rows affected: " . $cnt;echo "Last inserted id: " . $dbh->lastInsertId();
} else {echo "Error";
}
![Page 16: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/16.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 16
Fetching data with prepareThe default fetch methodology is unbufferedUses methods prepare() and execute()
Forward onlyRow count unknown
$dbh = new PDO($dsn);$stmt = $dbh->prepare("SELECT * FROM FOO");$stmt->execute();while ($row = $stmt->fetch()) {
// use data in $row}
$stmt = null;
![Page 17: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/17.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 17
Fetching data w/o prepareUses method query()Forward onlyRow count unknown
$dbh = new PDO($dsn);$stmt = $dbh->query("SELECT * FROM FOO");$stmt->execute();while ($row = $stmt->fetch()) {
// use data in $row}
$stmt = null;
![Page 18: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/18.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 18
Fetching data from iteratorFaster data accessWorks with and without preparationForward onlyRow count not available
$dbh = new PDO($dsn);$stmt = $dbh->prepare("SELECT * FROM FOO");$stmt->execute();foreach ($stmt as $row) {
// use data in $row}$stmt = null;
foreach($dbh->query("SELECT * FROM bar") as $row) {// use data in $row
}
![Page 19: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/19.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 19
Fetching data into arrayData is fully bufferedWorks with and without preparationRandam accessRow count availableUsefull if database doesn't support parallel queries
$dbh = new PDO($dsn);$stmt = $dbh->prepare("SELECT * FROM FOO");$stmt->execute();$data = $stmt->fetchAll();foreach ($data as $row) {
// use data in $row}
$stmt = null;
![Page 20: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/20.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 20
How to retrieve dataFetch single dataset in default way
mixed PDOStatement::fetch(int $mode = PDO_FETCH_BOTH, int $orientation = PDO_FETCH_ORI_NEXT, int $offset = 0)
also controlled byvoid PDOStatement::setFetchMode(
int $mode, // PDO_FETCH_*[mixed*$params]) // mode specific params
Fetch single column valuemixed PDOStatement::fetchColumn(
int $column_number = 0) // zero based index
![Page 21: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/21.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 21
How to retrieve dataFetch all rows at once
array PDOStatement::fetchAll(int $mode = PDO_FETCH_BOTH, string $class_name = NULL, array $ctor_args = NULL)
Fetch single row as objectmixed PDOStatement::fetchObject(
string $class_name = NULL, array $ctor_args = NULL)
![Page 22: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/22.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 22
Fetch modes and flagsModesPDO_FETCH_ASSOC associative arrayPDO_FETCH_NUM numeric arrayPDO_FETCH_BOTH default (assoc/numeric)PDO_FETCH_OBJ into stdClass object PDO_FETCH_BOUND into bound variablesPDO_FETCH_COLUMN single columnPDO_FETCH_CLASS into new instancePDO_FETCH_INTO into existing objectPDO_FETCH_FUNC through function callFlagsPDO_FETCH_GROUP group by first colPDO_FETCH_UNIQUE group unique by first colPDO_FETCH_CLASSTYPE use class name in rowPDO_FETCH_SERIALIZE use serialization
![Page 23: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/23.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 23
PDO_FETCH_BOUNDFetching returns true until there is no more data
Binding parameters by "?" in sql (1 based index)Binding parameters by ":name" in sqlBinding columns by name and index
$dbh = new PDO($dsn);$stmt = $dbh->prepare(
'SELECT url FROM urls WHERE key=:urlkey');$stmt->bindParam(':urlkey', $urlkey);$stmt->bindColumn('url', $href);
$urlkey = ...; // get url key to translate$stmt->execute(); // execute the query
// fetch data$stmt->fetch(PDO_FETCH_BOUND);// use dataecho '<a href="' . $href . '">' . $urlkey . '</a>';
![Page 24: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/24.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 24
PDO_FETCH_BOUNDFetching returns true until there is no more data
Binding parameters by "?" in sql 1 based indexBinding parameters by ":name" in sqlBinding columns by name and indexBinding can be done on execute()
$dbh = new PDO($dsn);$stmt = $dbh->prepare(
'SELECT url FROM urls WHERE key=:urlkey');
$urlkey = ...; // get url key to translate$stmt->execute(array(':urlkey' => $urlkey),
array('url' => $href));// fetch data$stmt->fetch(PDO_FETCH_BOUND);// use dataecho '<a href="' . $href . '">' . $urlkey . '</a>';
![Page 25: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/25.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 25
PDO_FETCH_CLASSLets you specify the class to instantiate
PDO_FETCH_OBJ always uses stdClassWrites data before calling __construct
Can write private/protected members
Lets you call the constructor with parametersclass Person {
protected $dbh, $fname, $lname;function __construct($dbh) {
$this->dbh = $dbh;}function __toString() {
return $this->fname . " " . $this->lname;}
}$stmt = $dbh->prepare('SELECT fname, lname FROM persons');$stmt->setFetchMode(PDO_FETCH_CLASS, 'Person', array($dbh));$stmt->execute();foreach($stmt as $person) {
echo $person;}
![Page 26: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/26.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 26
PDO_FETCH_CLASSTYPELets you fetch the class to instantiate from rows
Must be used with PDO_FETCH_CLASSThe class name specified in fetch mode is a fallback
class Person { /* ... */ }class Employee extends Person { /* ... */ }class Manager extends Employee { /* ... */ }
$stmt = $dbh->prepare('SELECT class, fname, lname FROM persons LEFT JOIN
classes ON persons.kind = classes.id');$stmt->setFetchMode(PDO_FETCH_CLASS|PDO_FETCH_CLASSTYPE,
'Person', array($dbh));$stmt->execute();foreach($stmt as $person) {
echo $person;
}
![Page 27: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/27.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 27
PDO_FETCH_INTOLets you reuse an already instantiated objectDoes not allow to read into protected or private
Because the constructor was already executed
class Person {public $dbh, $fname, $lname;function __construct($dbh) {
$this->dbh = $dbh;}function __toString() {
return $this->fname . " " . $this->lname;}
}$stmt = $dbh->prepare('SELECT fname, lname FROM persons');$stmt->setFetchMode(PDO_FETCH_INTO, new Person($dbh));$stmt->execute();foreach($stmt as $person) {
echo $person;}
![Page 28: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/28.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 28
PDO_FETCH_FUNCLets you specify a function to execute on each rowclass Person {
protected $fname, $lname;static function Factory($fname, $lname) {
$obj = new Person;$obj->fname = $fname;$obj->lname = $lname;
}function __toString() {
return $this->fname . " " . $this->lname;}
}$stmt = $dbh->prepare('SELECT fname, lname FROM persons');$stmt->setFetchMode(PDO_FETCH_FUNC,
array('Person', 'Factory'));$stmt->execute();foreach($stmt as $person) {
echo $person;}
![Page 29: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/29.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 29
PDOStatement as real iteratorPDOStatement only implements TraversableWrapper IteratorIterator takes a Traverable
$it = new IteratorIterator($stmt);
Now the fun beginsJust plug this into any other iteratorRecursion, SQL external unions, Filters, Limit, …
foreach(new LimitIterator($it, 10) as $data) {var_dump($data);
}
![Page 30: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/30.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 30
Deriving PDOStatementprepare() allows to specify fetch attributes
PDOStatement PDO::prepare(string $sql,array(PDO_ATTR_STATEMENT_CLASS =>
array(string classname,array(mixed * ctor_args))));
class MyPDOStatement extends PDOStatement {protected $dbh;function __construct($dbh) {
$this->dbh = $dbh;}
}$dbh->prepare($sql,
array(PDO_ATTR_STATEMENT_CLASS =>array('MyPDOStatement', array($dbh))));
![Page 31: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/31.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 31
Deriving PDOStatementDeriving allows to convert to real iterator
class PDOStatementAggregate extends PDOStatementimplements IteratorAggregate
{private function __construct($dbh, $classtype) {
$this->dbh = $dbh;$this->setFetchMode(PDO_FETCH_CLASS,
$classtype, array($this));}function getIterator() {
$this->execute();return new IteratorIterator($this,
'PDOStatement'); /* Need to be base class */}
}$stmt = $dbh->prepare('SELECT * FROM Persons',
array(PDO_ATTR_STATEMENT_CLASS => array('PDOStatementAggregate',
array($dbh, 'Person'))));foreach($stmt as $person){
echo $person;}
![Page 32: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/32.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 32
PDO error modesPDO offers 3 different error modes $dbh->setAttribute(PDO_ATTR_ERRMODE, $mode);
PDO_ERRMODE_SILENTSimply ignore any errors PDO_ERRMODE_WARNINGIssue errors as standard php warnings PDO_ERRMODE_EXCEPTIONThrow exception on errors
Map native codes to SQLSTATE standard codes Aditionally offers native info
![Page 33: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/33.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 33
Performance10 times Querying 10 rows
Iterators vs. ArraysImplemented as engine feature: 56%
⌦Building an Array is expensive
queryArray vs. query and fetchArray: 89%
⌦Function calls are expensive
![Page 34: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/34.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 34
Performance
Buffered vs. Unbuffered: up to 60%Buffered queries need to build a hash tableBuffered queries must copy dataUnbuffered queries can use destructive reads
⌦Copying data is expensive
copydata
engine extension
buffered
copypointer
engine extension
destructive
setNULL
![Page 35: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/35.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 35
PerformanceComparing OO vs. Procedural code
PC is easy to program?
PC uses resources: O(n*log(n))
PC uses a single function table: 2000 ... 4000
OO code is little bit more to learnOO code is easy to maintain
OO code uses object storage: O(n+c)
OO uses small method tables: 10 ... 100
![Page 36: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/36.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 36
Performance?
Don't get overexcited
using PDO your RDBMS is your bottlneck
![Page 37: Advanced Object Oriented Database access using · PDF fileMarcus Börger Advanced Object Oriented Database access using PDO 3; PHP 4 and Databases. PHP can connect to all important](https://reader033.fdocuments.us/reader033/viewer/2022051405/5a788ec47f8b9a77438ec677/html5/thumbnails/37.jpg)
Marcus Börger Advanced Object Oriented Database access using PDO 37
Links
This presenatationhttp://talks.somabo.de
Documenation on PDOhttp://docs.php.net/pdo
The PDO Extensionhttp://pecl.php.net/package/PDO
The Windows DLLshttp://snaps.php.net