PHP 8.3.4 Released!

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

PDO::PARAM_BOOL (int)
ブールデータ型を表します。
PDO::PARAM_NULL (int)
SQL NULL データ型を表します。
PDO::PARAM_INT (int)
SQL INTEGER データ型を表します。
PDO::PARAM_STR (int)
SQL CHAR, VARCHAR, または他の文字列データ型を表します。
PDO::PARAM_STR_NATL (int)
事前定義された文字セットを使用する文字列であることを示すフラグです。 PHP 7.2.0 以降で利用可能です。
PDO::PARAM_STR_CHAR (int)
通常の文字セットを使用する文字列であることを示すフラグです。 PHP 7.2.0 以降で利用可能です。
PDO::PARAM_LOB (int)
SQL ラージオブジェクト型を表します。
PDO::PARAM_STMT (int)
レコードセット型を表します。この型は現在どのドライバでもサポートされていません。
PDO::PARAM_INPUT_OUTPUT (int)
パラメータがストアドプロシージャ用の入力パラメータであることを指定します。 この値は、PDO::PARAM_* データ型とのビットORとして指定する必要があります。
PDO::FETCH_DEFAULT (int)
デフォルトの取得方法を使うことを指定します。 PHP 8.0.7 以降で利用可能です。
PDO::FETCH_LAZY (int)
取得する方法として、 結果セットが返すカラム名と同じ名前のプロパティを有するオブジェクトとして各行を返す方法を 指定します。 PDO::FETCH_LAZY は、アクセスされたものと同じ名前のプロパティ名を作成する PDORow オブジェクトを返します。 PDOStatement::fetchAll() の中では使えません。
PDO::FETCH_ASSOC (int)
結果セットの対応するカラム名にふられているものと同じキーを付けた 連想配列として各行を返す取得方法を指定します。 もし結果セットが複数のカラムを同名で含む場合、 PDO::FETCH_ASSOC はカラム名毎に 1 つの値のみ返します。
PDO::FETCH_NAMED (int)
結果セットの対応するカラム名にふられているものと同じキーを付けた 連想配列として各行を返す取得方法を指定します。 もし結果セットが複数のカラムを同名で含む場合、 PDO::FETCH_NAMED はカラム名毎に値の配列を返します。
PDO::FETCH_NUM (int)
結果セットの対応するカラム番号にふられているものと同じ添字を付けた 配列として各行を返す取得方法を指定します。番号は0から始まります。
PDO::FETCH_BOTH (int)
結果セットと同じカラム名と0から始まるカラム番号を付けた配列として各行を返す 方法を指定します。
PDO::FETCH_OBJ (int)
結果セットが返すカラム名と同じ名前のプロパティを有する オブジェクトとして各行を返す方法を指定します。
PDO::FETCH_BOUND (int)
結果セットのカラムの値を PDOStatement::bindParam() または PDOStatement::bindColumn() メソッドでバインドされた PHP変数に代入し、TRUEを返すという取得方法を指定します。
PDO::FETCH_COLUMN (int)
結果セットの次の行から指定された一つのカラムのみを返す取得方法を指定します。
PDO::FETCH_CLASS (int)
カラムをクラスのプロパティにマップしつつ、 指定されたクラスの新規インスタンスを返す取得方法を指定します。

注意: 要求されたクラスにプロパティが存在しない場合は、マジックメソッド __set() がコールされます。

PDO::FETCH_INTO (int)
カラムをクラスのプロパティにマップしつつ、 指定されたクラスの既存のインスタンスを更新する取得方法を指定します。
PDO::FETCH_FUNC (int)
データをその場で扱う方法を完全にカスタマイズできるようにします (PDOStatement::fetchAll() の中でしか使えません)。
PDO::FETCH_GROUP (int)
値で返すグループ。 PDO::FETCH_COLUMN あるいは PDO::FETCH_KEY_PAIR と組み合わせます。
PDO::FETCH_UNIQUE (int)
一意な値だけを取得します。
PDO::FETCH_KEY_PAIR (int)
ふたつのカラムからなる結果を配列で取得します。最初のカラムの値がキー、二番目のカラムの内容が値となります。
PDO::FETCH_CLASSTYPE (int)
最初のカラムの値からクラス名を決定します。
PDO::FETCH_SERIALIZE (int)
PDO::FETCH_INTO と同様ですが、 シリアライズした文字列としてオブジェクトを提供します。 このフラグを設定した場合はコンストラクタが呼ばれません。 PHP 8.1.0 以降は、この定数は推奨されなくなりました。
PDO::FETCH_PROPS_LATE (int)
コンストラクタを呼んでからプロパティを設定します。
PDO::ATTR_AUTOCOMMIT (int)
この値が false の場合、PDO は接続がトランザクションを開始できるように オートコミットを無効にしようとします。
PDO::ATTR_PREFETCH (int)
独自アプリケーションにおけるメモリ使用量に対する速度のバランスを 調整するためのプリフェッチサイズを設定します。 全てのデータベースとドライバの組み合わせでプリフェッチサイズの設定を サポートしているわけではありません。
PDO::ATTR_TIMEOUT (int)
データベースとの通信に対するタイムアウト値を秒で設定します。
PDO::ATTR_ERRMODE (int)
PDO::ATTR_SERVER_VERSION (int)
PDO::ATTR_CLIENT_VERSION (int)
PDO::ATTR_SERVER_INFO (int)
PDO::ATTR_CONNECTION_STATUS (int)
PDO::ATTR_CASE (int)
PDO::CASE_* 定数で指定されたケースにカラム名を変更します。
PDO::ATTR_CURSOR_NAME (int)
PDO::ATTR_CURSOR (int)
PDO::ATTR_DRIVER_NAME (int)
ドライバ名を返します。

例1 PDO::ATTR_DRIVER_NAME の使用例

<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
echo
"mysql 上で動作しています。何か mysql 固有のことをここで行います\n";
}
?>

PDO::ATTR_ORACLE_NULLS (int)
空文字を SQL の NULL 値に変換します。
PDO::ATTR_PERSISTENT (int)
新規接続を生成するよりもむしろ持続的接続を要求します。
PDO::ATTR_STATEMENT_CLASS (int)
Sets the class name of which statements are returned as.
PDO::ATTR_FETCH_CATALOG_NAMES (int)
結果セット中の各カラム名にカタログ名を追加します。 カタログ名とカラム名は、小数点 (.) で区切られます。
PDO::ATTR_FETCH_TABLE_NAMES (int)
結果セット中の各カラム名にテーブル名を追加します。 テーブル名とカラム名は、小数点 (.) で区切られます。
PDO::ATTR_STRINGIFY_FETCHES (int)
全てのフェッチする値を強制的に文字列として扱います。
PDO::ATTR_MAX_COLUMN_LEN (int)
カラム名の最大の長さを設定します。
PDO::ATTR_DEFAULT_FETCH_MODE (int)
PDO::ATTR_EMULATE_PREPARES (int)
PDO::ATTR_DEFAULT_STR_PARAM (int)
デフォルトの文字列のパラメータタイプを設定します。 PDO::PARAM_STR_NATLPDO::PARAM_STR_CHAR のうち、いずれかひとつを選べます。 PHP 7.2.0 以降で利用可能です。
PDO::ERRMODE_SILENT (int)
エラー時にエラーもしくは例外を発生しません。 開発者の方は明示的にエラーをチェックするようにしてください。 これはデフォルトのモードです。
PDO::ERRMODE_WARNING (int)
エラーが発生した場合、PHP の E_WARNING メッセージを発行します。
PDO::ERRMODE_EXCEPTION (int)
エラーが発生した場合、PDOException をスローします。
PDO::CASE_NATURAL (int)
カラム名をデータベースドライバにより返されたままにします。
PDO::CASE_LOWER (int)
カラム名を小文字にします。
PDO::CASE_UPPER (int)
カラム名を大文字にします。
PDO::NULL_NATURAL (int)
PDO::NULL_EMPTY_STRING (int)
PDO::NULL_TO_STRING (int)
PDO::FETCH_ORI_NEXT (int)
結果セットの次の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_PRIOR (int)
結果セットの前の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_FIRST (int)
結果セットの先頭の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_LAST (int)
結果セットの最後の行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_ABS (int)
結果セットから行番号で指定した行を取得します。スクローラブルなカーソルでのみ有効です。
PDO::FETCH_ORI_REL (int)
結果セットのカーソルの現在の位置を基準とする相対位置により指定された行を 取得します。スクローラブルなカーソルでのみ有効です。
PDO::CURSOR_FWDONLY (int)
前進のみ可能なカーソルを有する PDOStatement オブジェクトを生成します。 これにより、アプリケーションの性能は改善しますが、 PDOStatementオブジェクトは前方にある結果セットから一度に一行を 取得するという制約を受けます。
PDO::CURSOR_SCROLL (int)
スクローラブルカーソルを有する PDOStatement オブジェクトを作成します。 結果セットから取得した行を制御するための PDO::FETCH_ORI_* 定数を指定して ください。
PDO::ERR_CANT_MAP (int)
PDO::ERR_SYNTAX (int)
PDO::ERR_CONSTRAINT (int)
PDO::ERR_NOT_FOUND (int)
PDO::ERR_ALREADY_EXISTS (int)
PDO::ERR_NOT_IMPLEMENTED (int)
PDO::ERR_MISMATCH (int)
PDO::ERR_TRUNCATED (int)
PDO::ERR_DISCONNECTED (int)
PDO::ERR_NO_PERM (int)
PDO::ERR_NONE (string)
SQLSTATE '00000' は SQL ステートメントがエラーや警告がなく発行に成功したことを意味します。 この定数はエラーが発生したかどうかを判別するために PDO::errorCode() もしくは PDOStatement::errorCode() をチェックする際に 便利です。この場合、通常はエラー状態を発生したメソッドからの戻りコードを 検査することによって検知します。
PDO::PARAM_EVT_ALLOC (int)
割り当てられたときに発生するイベント。
PDO::PARAM_EVT_FREE (int)
割り当てが解除されたときに発生するイベント。
PDO::PARAM_EVT_EXEC_PRE (int)
プリペアドステートメントの実行前に発生するイベント。
PDO::PARAM_EVT_EXEC_POST (int)
プリペアドステートメントの実行後に発生するイベント。
PDO::PARAM_EVT_FETCH_PRE (int)
結果セットから結果を取得する前に発生するイベント。
PDO::PARAM_EVT_FETCH_POST (int)
結果セットから結果を取得した後に発生するイベント。
PDO::PARAM_EVT_NORMALIZE (int)
バインドパラメータの登録時に発生するイベント。 これにより、ドライバがパラメータ名を正規化できるようになります。
PDO::SQLITE_DETERMINISTIC (int)
PDO::sqliteCreateFunction() で作られる関数が決定論的であることを指定します。 つまり、同じ入力が与えられると、単一のSQLステートメントの範疇では同じ結果が常に返されます。 (PHP 7.1.4 以降で使用可能です)
add a note

User Contributed Notes 8 notes

up
21
sam at xnet dot tk
11 years ago
It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).
up
5
kevin at kevinlocke dot name
4 years ago
PDO::PARAM_STR_CHAR and PDO::PARAM_STR_NATL must be combined with PDO::PARAM_STR using bitwise-OR for parameter binding.

These flags control value quoting (e.g. PDO::quote) and, in some situations (see below), parameter binding (e.g. PDO::bindParam, PDO::bindValue) to prefix string literals with N'' as defined in SQL-92. As of PHP 7.3, only dblib and mysql support these flags. For the mysql driver, the flags only affect parameter binding when PDO::ATTR_EMULATE_PREPARES is true (the default).

MySQL and MariaDB interpret string literals prefixed with N as being utf8 (not utf8mb4) regardless of `SET NAMES` or the charset parameter. This can cause problems if the database/table/column charset is not utf8. For example, in a database using utf8mb4, the query "SELECT * FROM table WHERE col = :param" and bindValue(":param", "\u{1F600}", PDO::PARAM_STR | PDO::PARAM_STR_NATL) will cause "PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='". Using PDO::PARAM_STR without PDO::PARAM_STR_NATL and ensuring the charset DSN parameter is set correctly can avoid this issue.

See:
https://wiki.php.net/rfc/extended-string-types-for-pdo
https://mariadb.com/kb/en/library/string-literals/
https://dev.mysql.com/doc/refman/8.0/en/string-literals.html
up
4
todd at toddwiggins dot com dot au
4 years ago
Reference to all the PDO::MYSQL_* constants is available in MySQL's documentation for the driver here: https://dev.mysql.com/doc/connectors/en/apis-php-pdo-mysql.html

Such as the ones I was looking for PDO::MYSQL_ATTR_SSL_CA and PDO::MYSQL_ATTR_SSL_CAPATH which are not listed on this page.
up
2
Sbastien
3 years ago
PDO::FETCH_UNIQUE not only fetches the unique values, it also uses the first SQL column as array key result, what is very useful for create quickly an index, eg :

<?php

$sql
= <<<SQL
SELECT ALL
c1, -- For result indexing
c1, c2
FROM (
VALUES
ROW('ID-1', 'Value 1'),
ROW('ID-2', 'Value 2a'),
ROW('ID-2', 'Value 2b'),
ROW('ID-3', 'Value 3')
) AS t (c1, c2);
SQL;
$result = $pdo->query($sql);
print_r($result->fetchAll(PDO::FETCH_UNIQUE));

/*
Gives :
ID-1 => [c1 => ID-1, c2 => Value 1]
ID-2 => [c1 => ID-2b, c2 => Value 2b]
ID-3 => [c1 => ID-3, c2 => Value 3]
*/

?>
up
5
Oleg Andreyev
7 years ago
Default value for \PDO::ATTR_TIMEOUT is 30 seconds.
Ref.: https://github.com/php/php-src/blob/PHP-7.1.0/ext/pdo_mysql/mysql_driver.c#L600
up
0
happy dot job7348 at fastmail dot com
2 months ago
To bind a float, use PDO::PARAM_STR with bindValue. You can skip the PDO::PARAM_STR because it's the default option. Binding with bindParam will change the type of the bound variable to a string, which can lead to type errors.
up
0
Rexana
1 year ago
Reference for PDO MySQL constants Todd mentioned have moved to here: https://www.php.net/manual/en/ref.pdo-mysql.php

This includes documentation on constants like PDO::MYSQL_ATTR_SSL_CA, PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT, and more.
up
-5
ko dot izawa at gmail dot com
7 years ago
When you use REAL type column on SQLite, your setting of pdo parameter of bindValue() is PDO::PARAM_STR.

'''
$stmt->bindValue(':elapse_time', $e_time, PDO::PARAM_STR);
'''
To Top