It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。
PDO::ATTR_CURSOR_NAME も参照ください。
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 オブジェクトを生成します。 これはデフォルトのカーソルです。 なぜなら、処理が一番高速で、 PHP ではもっとも一般的なデータアクセスパターンだからです。
PDO::CURSOR_SCROLL
(int)
スクローラブルカーソルを有する
PDOStatement オブジェクトを作成します。
結果セットから取得した行を制御するための
PDO::FETCH_ORI_*
定数を指定してください。
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::ATTR_AUTOCOMMIT
(bool)
この値が false の場合、PDO は接続がトランザクションを開始できるように
オートコミットを無効にしようとします。
PHP 8.4.0 以降、この定数は bool として型付けされています。 それ以前は、int として型付けされていました。
PDO::ATTR_PREFETCH
(int)
独自アプリケーションにおける、 メモリ使用量に対する速度のバランスを調整するためのプリフェッチサイズを設定します。 全てのデータベースとドライバの組み合わせでプリフェッチサイズの設定をサポートしているわけではありません。 プリフェッチサイズを大きくするとパフォーマンスは向上しますが、 メモリ使用量は増加します。
一方 PDO_PGSQL ドライバは、この属性をトグルとして扱います。
PHP 8.5.0 以降、値 0 を指定すると遅延(1行ずつの)フェッチが有効になります。
詳細は
PDO_PGSQL ドライバのドキュメント
を参照ください。
PDO::ATTR_TIMEOUT
(int)
データベースとの通信に対するタイムアウト値を秒で設定します。
PDO::ATTR_ERRMODE
(int)
この属性についての詳細は、 エラー及びエラー処理 を参照ください。
PDO::ATTR_SERVER_VERSION
(int)
この属性は読み取り専用です。 PDO が接続している、データベースサーバーのバージョンに関する情報を返します。
PDO::ATTR_CLIENT_VERSION
(int)
この属性は読み取り専用です。 PDO ドライバが使っているクライアントライブラリのバージョンに関する情報を返します。
PDO::ATTR_SERVER_INFO
(int)
この属性は読み取り専用です。 PDO が接続している、データベースサーバーのメタ情報に関する情報を返します。
PDO::ATTR_CONNECTION_STATUS
(int)
PDO::ATTR_CASE
(int)
PDO::CASE_*
定数で指定されたケースにカラム名を変更します。
PDO::ATTR_CURSOR_NAME
(int)
カーソルに使用する名前を取得または設定します。 スクローラブルなカーソルと、 位置を指定した更新を行う場合に最も有用です。
PDO::ATTR_CURSOR
(int)
カーソルのタイプを指定します。
PDO は現在、
PDO::CURSOR_FWDONLY と
PDO::CURSOR_SCROLL をサポートしています。
スクローラブルなカーソルが必要ない限り、
PDO::CURSOR_FWDONLY のままにしてください。
PDO::ATTR_DRIVER_NAME
(int)
ドライバ名を返します。
例1 PDO::ATTR_DRIVER_NAME を使う
<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
echo "Running on mysql; doing something mysql specific here\n";
}
?>PDO::ATTR_ORACLE_NULLS
(int)
データをフェッチ時に、 空文字を SQL の NULL 値に変換します。
PDO::ATTR_PERSISTENT
(int)
新規接続を生成するよりもむしろ持続的接続を要求します。 この属性に関する詳細は、 接続、および接続の管理 を参照ください。
PDO::ATTR_STATEMENT_CLASS
(int)
PDOStatement オブジェクトを拡張するクラス名と、 そのコンストラクタの引数を設定します。 配列の最初の要素がクラス名で、2 番目の要素がコンストラクタの引数の配列です。
PDO::ATTR_FETCH_CATALOG_NAMES
(int)
結果セット中の各カラム名にカタログ名を追加します。 カタログ名とカラム名は、小数点 (.) で区切られます。 この属性のサポートはドライバレベルで行われます。 つまり、お使いのドライバではサポートされていない可能性があります。
PDO::ATTR_FETCH_TABLE_NAMES
(int)
結果セット中の各カラム名に、 そのカラムを含むテーブル名を先頭に付加します。 テーブル名とカラム名は小数点(.)で区切られます。 この属性のサポートはドライバレベルで行われます。 つまり、お使いのドライバではサポートされていない可能性があります。
PDO::ATTR_STRINGIFY_FETCHES
(int)
全てのフェッチする値 (null を除く) を強制的に文字列として扱います。
PDO::ATTR_ORACLE_NULLS を
PDO::NULL_TO_STRING に設定しない限り、
null は変更されません。
PDO::ATTR_MAX_COLUMN_LEN
(int)
カラム名の最大の長さを設定します。
PDO::ATTR_DEFAULT_FETCH_MODE
(int)
PDO::ATTR_EMULATE_PREPARES
(bool)
プリペアドステートメントのエミュレーションを有効にするか無効にするかを指定します。
ドライバの中には、ネイティブのプリペアドステートメントをサポートしていないものや、
限定的にしかサポートしていないものがあります。true が設定された場合、
PDO は常にプリペアドステートメントをエミュレートします。false が設定された場合、
ドライバのネイティブなプリペアドステートメントを使用します。
PHP 8.4.0 以降、この定数は bool として型付けされています。 それ以前は、int として型付けされていました。
PDO::ATTR_DEFAULT_STR_PARAM
(int)
デフォルトの文字列のパラメータタイプを設定します。
PDO::PARAM_STR_NATL
と PDO::PARAM_STR_CHAR のうち、
いずれかひとつを選べます。
PHP 7.2.0 以降で利用可能です。
PDO::ERRMODE_SILENT
(int)
エラー時にエラーもしくは例外を発生させません。 開発者の方は明示的にエラーをチェックするようにしてください。 PHP 8.0.0 より前のバージョンでは、これがデフォルトのモードでした。 この属性に関する詳細は、 エラー及びエラー処理 を参照ください。
PDO::ERRMODE_WARNING
(int)
エラーが発生した場合、
PHP の E_WARNING メッセージを発行します。
この属性に関する詳細は、
エラー及びエラー処理
を参照ください。
PDO::ERRMODE_EXCEPTION
(int)
エラーが発生した場合、 PDOException をスローします。 PHP 8.0.0 以降では、これがデフォルトのモードです。 この属性に関する詳細は、 エラー及びエラー処理 を参照ください。
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::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)
PHP 8.5.0 以降、この定数は非推奨となりました。
代わりに Pdo\Sqlite::DETERMINISTIC を使用してください。
PDO::sqliteCreateFunction() で作られる関数が決定論的であることを指定します。 つまり、同じ入力が与えられると、 単一のSQLステートメントの範囲では同じ結果が常に返されます。 (PHP 7.1.4 以降で使用可能です)
It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).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#L600PDO::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.htmlPDO::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]
*/
?>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.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.