PHP Data Objects
- はじめに
- インストール/設定
- 定義済み定数
- 接続、および接続の管理
- トランザクションおよび自動コミット
- プリペアドステートメントおよびストアドプロシージャ
- エラーおよびエラー処理
- ラージオブジェクト (LOB)
- PDO — PDO クラス
- PDO::beginTransaction — トランザクションを開始する
- PDO::commit — トランザクションをコミットする
- PDO::connect — データベースに接続しドライバが対応する PDO サブクラスを返す
- PDO::__construct — データベースへの接続を表す PDO インスタンスを生成する
- PDO::errorCode — データベースハンドラにおける直近の操作に関連する SQLSTATE を取得する
- PDO::errorInfo — データベースハンドラにおける直近の操作に関連する拡張エラー情報を取得する
- PDO::exec — SQL ステートメントを実行し、作用した行数を返す
- PDO::getAttribute — データベース接続の属性を取得する
- PDO::getAvailableDrivers — 利用可能な PDO ドライバの配列を返す
- PDO::inTransaction — トランザクション内かどうかを調べる
- PDO::lastInsertId — 最後に挿入された行の ID あるいはシーケンスの値を返す
- PDO::prepare — 文を実行する準備を行い、文オブジェクトを返す
- PDO::query — プレースホルダを指定せずに、SQL ステートメントを準備して実行する
- PDO::quote — クエリ用の文字列をクオートする
- PDO::rollBack — トランザクションをロールバックする
- PDO::setAttribute — 属性を設定する
- PDOStatement — PDOStatement クラス
- PDOStatement::bindColumn — カラムを PHP 変数にバインドする
- PDOStatement::bindParam — 指定された変数名にパラメータをバインドする
- PDOStatement::bindValue — 値をパラメータにバインドする
- PDOStatement::closeCursor — カーソルを閉じてステートメントを再実行できるようにする
- PDOStatement::columnCount — 結果セット中のカラム数を返す
- PDOStatement::debugDumpParams — SQL プリペアドコマンドを出力する
- PDOStatement::errorCode — 文ハンドラにおける直近の操作に関連する SQLSTATE を取得する
- PDOStatement::errorInfo — 文ハンドラにおける直近の操作に関連する拡張エラー情報を取得する
- PDOStatement::execute — プリペアドステートメントを実行する
- PDOStatement::fetch — 結果セットから次の行を取得する
- PDOStatement::fetchAll — 結果セットから、残っている行を取得する
- PDOStatement::fetchColumn — 結果セットの次行から単一カラムを返す
- PDOStatement::fetchObject — 次の行を取得し、それをオブジェクトとして返す
- PDOStatement::getAttribute — 文の属性を取得する
- PDOStatement::getColumnMeta — 結果セットのカラムに対するメタデータを返す
- PDOStatement::getIterator — 結果セットのイテレータを取得する
- PDOStatement::nextRowset — 複数の行セットを返す文ハンドラで次の行セットに移動する
- PDOStatement::rowCount — 直近の SQL ステートメントによって作用した行数を返す
- PDOStatement::setAttribute — 文の属性を設定する
- PDOStatement::setFetchMode — この文に対するデフォルトのフェッチモードを設定する
- PDOException — PDOException クラス
- PDORow — PDORow クラス
- PDO ドライバ
- CUBRID (PDO) — CUBRID 関数 (PDO_CUBRID)
- MS SQL Server (PDO) — Microsoft SQL Server および Sybase 関数 (PDO_DBLIB)
- Pdo\Dblib — Pdo\Dblib クラス
- Firebird (PDO) — Firebird 関数 (PDO_FIREBIRD)
- Pdo\Firebird — Pdo\Firebird クラス
- IBM (PDO) — IBM 関数 (PDO_IBM)
- Informix (PDO) — Informix 関数 (PDO_INFORMIX)
- MySQL (PDO) — MySQL 関数 (PDO_MYSQL)
- Pdo\Mysql — Pdo\Mysql クラス
- MS SQL Server (PDO) — Microsoft SQL Server 関数 (PDO_SQLSRV)
- Oracle (PDO) — Oracle 関数 (PDO_OCI)
- ODBC and DB2 (PDO) — ODBC および DB2 関数 (PDO_ODBC)
- Pdo\Odbc — Pdo\Odbc クラス
- PostgreSQL (PDO) — PostgreSQL 関数 (PDO_PGSQL)
- Pdo\Pgsql — Pdo\Pgsql クラス
- SQLite (PDO) — SQLite 関数 (PDO_SQLITE)
- Pdo\Sqlite — Pdo\Sqlite クラス
+add a note
User Contributed Notes 5 notes
djlopez at gmx dot de ¶
18 years ago
Please note this:
Won't work:
$sth = $dbh->prepare('SELECT name, colour, calories FROM ? WHERE calories < ?');
THIS WORKS!
$sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ?');
The parameter cannot be applied on table names!!
wiserufferto at gmail dot com ¶
3 years ago
This is a little late... but I'm old and slow.......
Regarding Extending PDOStatement and PDO I found that sending the PDOExtended class by reference helps:
In the constructor after parent::__construct() :
$this->setAttribute(\PDO::ATTR_STATEMENT_CLASS,array('PDOStatementExtended', [&$this]));}
And in
class PDOStatementExtended extends \PDOStatement
{
protected function __construct
(
\PDO &$PDO,
)
pokojny at radlight dot com ¶
18 years ago
I wanted to extend PDO class to store statistics of DB usage, and I faced some problems. I wanted to count number of created statements and number of their executings. So PDOStatement should have link to PDO that created it and stores the statistical info. The problem was that I didn't knew how PDO creates PDOStatement (constructor parameters and so on), so I have created these two classes:
<?php
/**
* PHP Document Object plus
*
* PHP Document Object plus is library with functionality of PDO, entirely written
* in PHP, so that developer can easily extend it's classes with specific functionality,
* such as providing database usage statistics implemented in v1.0b
*
* @author Peter Pokojny
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
class PDOp {
protected $PDO;
public $numExecutes;
public $numStatements;
public function __construct($dsn, $user=NULL, $pass=NULL, $driver_options=NULL) {
$this->PDO = new PDO($dsn, $user, $pass, $driver_options);
$this->numExecutes = 0;
$this->numStatements = 0;
}
public function __call($func, $args) {
return call_user_func_array(array(&$this->PDO, $func), $args);
}
public function prepare() {
$this->numStatements++;
$args = func_get_args();
$PDOS = call_user_func_array(array(&$this->PDO, 'prepare'), $args);
return new PDOpStatement($this, $PDOS);
}
public function query() {
$this->numExecutes++;
$this->numStatements++;
$args = func_get_args();
$PDOS = call_user_func_array(array(&$this->PDO, 'query'), $args);
return new PDOpStatement($this, $PDOS);
}
public function exec() {
$this->numExecutes++;
$args = func_get_args();
return call_user_func_array(array(&$this->PDO, 'exec'), $args);
}
}
class PDOpStatement implements IteratorAggregate {
protected $PDOS;
protected $PDOp;
public function __construct($PDOp, $PDOS) {
$this->PDOp = $PDOp;
$this->PDOS = $PDOS;
}
public function __call($func, $args) {
return call_user_func_array(array(&$this->PDOS, $func), $args);
}
public function bindColumn($column, &$param, $type=NULL) {
if ($type === NULL)
$this->PDOS->bindColumn($column, $param);
else
$this->PDOS->bindColumn($column, $param, $type);
}
public function bindParam($column, &$param, $type=NULL) {
if ($type === NULL)
$this->PDOS->bindParam($column, $param);
else
$this->PDOS->bindParam($column, $param, $type);
}
public function execute() {
$this->PDOp->numExecutes++;
$args = func_get_args();
return call_user_func_array(array(&$this->PDOS, 'execute'), $args);
}
public function __get($property) {
return $this->PDOS->$property;
}
public function getIterator() {
return $this->PDOS;
}
}
?>
Classes have properties with original PDO and PDOStatement objects, which are providing the functionality to PDOp and PDOpStatement.
From outside, PDOp and PDOpStatement look like PDO and PDOStatement, but also are providing wanted info.
dougwilbourne at gmail dot com ¶
5 days ago
Now that current versions of MySQL are forcing users to authenticate with caching_sha2_password instead of mysql_native_driver, I wanted to get PDO to send passwords that way. I think the only way to do it is to make the connection over SSL. Setting up your web server and database server for SSL is way beyond the scope of this note, but after you do, remember that you will need to add an options array as the last argument in your PDO connection arguments. At a minimum, you will need to supply the server certificate. In a development environment with a self-signed server certificate, you will also want to bypass verification that your server certificate is 'real'. So your options array would look like this
$opts = [ PDO::MYSQL_ATTR_SSL_CA => $server_cert_file_path, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false];
Hope it helps!
www.navin.biz ¶
18 years ago
Below is an example of extending PDO & PDOStatement classes:
<?php
class Database extends PDO
{
function __construct()
{
parent::__construct('mysql:dbname=test;host=localhost', 'root', '');
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', array($this)));
}
}
class DBStatement extends PDOStatement
{
public $dbh;
protected function __construct($dbh)
{
$this->dbh = $dbh;
$this->setFetchMode(PDO::FETCH_OBJ);
}
public function foundRows()
{
$rows = $this->dbh->prepare('SELECT found_rows() AS rows', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE));
$rows->execute();
$rowsCount = $rows->fetch(PDO::FETCH_OBJ)->rows;
$rows->closeCursor();
return $rowsCount;
}
}
?>
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google