рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХреНрдпреЛрдВ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП PHP рдХреЗ рдкреАрдбреАрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдХрдИ PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mysql рдФрд░ mysqli рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди PHP рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 5.1 рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ -
PHP рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ ред рдпрд╣ рд╡рд░реНрдЧ, рдЬрд┐рд╕реЗ рдкреАрдбреАрдУ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╕реНрддреБрдУрдВ рдФрд░
рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрдердиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛!
рдкреАрдбреАрдУ рдХрд╛ рдкрд░рд┐рдЪрдп
"рдкреАрдбреАрдУ - PHP рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдкрд░рдд рд╣реИ рдЬреЛ рдХрдИ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред"
рд╡рд╣ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╡рд┐рднрд┐рдиреНрди DBMS рдХреА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рдХрдо рджрд░реНрджрдирд╛рдХ рдмрдирд╛рддрд╛ рд╣реИред рдЕрдХреНрд╕рд░, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ mysql рдФрд░ mysqli рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд▓рдЪреАрд▓реЗ PDO рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХреЗред
DBMS рдХрд╛ рд╕рдорд░реНрдерди
рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдбреАрдУ рдЪрд╛рд▓рдХ рдореМрдЬреВрдж рд╣реИред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреНрд░рд╛рдЗрд╡рд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
- PDO_CUBRID (CUBRID)
- PDO_DBLIB (рдлреНрд░реАрдЯреАрдбреАрдПрд╕ / рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ / рд╕рд┐рдмреЗрд╕)
- PDO_FIREBIRD (рдлрд╛рдпрд░рдмрд░реНрдб / рдЗрдВрдЯрд░рдмреЗрд╕ 6)
- PDO_IBM (IBM DB2)
- PDO_INFORMIX (IBM Informix рдбрд╛рдпрдиреЗрдорд┐рдХ рд╕рд░реНрд╡рд░)
- PDO_MYSQL (MySQL 3.x / 4.x / 5.x)
- PDO_OCI (Oracle рдХреЙрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕)
- PDO_ODBC (ODBC v3 (IBM DB2, unixODBC рдФрд░ win32 ODBC))
- PDO_PGSQL (PostgreSQL)
- PDO_SQLITE (SQLite 3 рдФрд░ SQLite 2)
- PDO_SQLSRV (Microsoft SQL рд╕рд░реНрд╡рд░)
- PDO_4D (4D)
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рд╣реИрдВред рдЖрдк рдЗрд╕ рддрд░рд╣ рдЙрдкрд▓рдмреНрдз рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
print_r(PDO::getAvailableDrivers());
. . , , SQLite.
try {
$DBH = new PDO("mssql:host=$host;dbname=$dbname", $user, $pass);
$DBH = new PDO("sybase:host=$host;dbname=$dbname", $user, $pass);
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$DBH = new PDO("sqlite:my/database/path/database.db");
}
catch(PDOException $e) {
echo $e->getMessage();
}
, try/catch тАУ PDO- ( ).
$DBH ┬лdatabase handle┬╗ .
null.
$DBH = null;
php.net.
PDO
PDO , try/catch. , PDO :
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
, .
PDO::ERRMODE_SILENT
. , , mysql mysqli.
DRY .
PDO::ERRMODE_WARNING
Warning . .
PDO::ERRMODE_EXCEPTION
. , . , , :
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$DBH->prepare('DELECT name FROM people')->execute();
}
catch(PDOException $e) {
echo ", .";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
SQL- , . - , - .
Insert Update
. PDO . ( UPDATE, INSERT)

:
$STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");
$STH->execute();
- exec(), prepared statements. SQL-, .
Prepared Statements
prepared statements SQL-.
Prepared statement тАФ SQL-, . SQL- , placeholderтАЩ.
prepared statements.
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");
, . placeholderтАЩ , prepared statements.
placeholderтАЩ
$STH->bindParam(1, $name);
$STH->bindParam(2, $addr);
$STH->bindParam(3, $city);
$name = "Daniel"
$addr = "1 Wicked Way";
$city = "Arlington Heights";
$STH->execute();
$name = "Steve"
$addr = "5 Circle Drive";
$city = "Schaumburg";
$STH->execute();
. placeholderтАЩ ( 2-4). . , .
SQL- , . :
$data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");
$STH->execute($data);
$data[0] placeholderтАЩ, $data[1] тАФ , .. : , .
placeholderтАЩ
$STH->bindParam(':name', $name);
, . , , placeholderтАЩ.
$data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");
$STH->execute($data);
placeholderтАЩ , . , , :
class person {
public $name;
public $addr;
public $city;
function __construct($n,$a,$c) {
$this->name = $n;
$this->addr = $a;
$this->city = $c;
}
}
$cathy = new person('Cathy','9 Dark and Twisty','Cardiff');
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");
$STH->execute((array)$cathy);
execute() , .

->fetch(). , . :
- PDO::FETCH_ASSOC:
- PDO::FETCH_BOTH ( ): ,
- PDO::FETCH_BOUND: , ->bindColumn()
- PDO::FETCH_CLASS: . - ,
- PDO::FETCH_INTO:
- PDO::FETCH_LAZY: PDO::FETCH_BOTH PDO::FETCH_OBJ
- PDO::FETCH_NUM:
- PDO::FETCH_OBJ: ,
: FETCH_ASSOC, FETCH_CLASS, FETCH_OBJ. , :
$STH->setFetchMode(PDO::FETCH_ASSOC);
->fetch().
FETCH_ASSOC
. , mysql/mysqli.
$STH = $DBH->query('SELECT name, addr, city from folks');
$STH->setFetchMode(PDO::FETCH_ASSOC);
while($row = $STH->fetch()) {
echo $row['name'] . "\n";
echo $row['addr'] . "\n";
echo $row['city'] . "\n";
}
while() .
FETCH_OBJ
std .
$STH = $DBH->query('SELECT name, addr, city from folks');
$STH->setFetchMode(PDO::FETCH_OBJ);
while($row = $STH->fetch()) {
echo $row->name . "\n";
echo $row->addr . "\n";
echo $row->city . "\n";
}
FETCH_CLASS
fetch_class . . , , , ( public).
, .
, .
class secret_person {
public $name;
public $addr;
public $city;
public $other_data;
function __construct($other = '') {
$this->addr = preg_replace('/[a-z]/', 'x', $this->addr);
$this->other_data = $other;
}
}
x. :
$STH = $DBH->query('SELECT name, addr, city from folks');
$STH->setFetchMode(PDO::FETCH_CLASS, 'secret_person');
while($obj = $STH->fetch()) {
echo $obj->addr;
}
тАЩ5 RosebudтАЩ, тАЩ5 RxxxxxxтАЩ.
, , . PDO .
$STH->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'secret_person');
, (PDO::FETCH_PROPS_LATE), , .
, :
$STH->setFetchMode(PDO::FETCH_CLASS, 'secret_person', array('stuff'));
:
$i = 0;
while($rowObj = $STH->fetch(PDO::FETCH_CLASS, 'secret_person', array($i))) {
$i++;
}
( ) PDO ( !), .
$DBH->lastInsertId();
->lastInsertId() id . , ( $DBH), ($STH).
$DBH->exec('DELETE FROM folks WHERE 1');
$DBH->exec("SET time_zone = '-8:00'");
->exec() , , .
$safe = $DBH->quote($unsafe);
->quote() , . , prepared statements.
$rows_affected = $STH->rowCount();
->rowCount() , . , SELECT- PHP 5.1.6. PHP , :
$sql = "SELECT COUNT(*) FROM folks";
if ($STH = $DBH->query($sql)) {
if ($STH->fetchColumn() > 0) {
}
else {
}
}
, - mysql mysqli.