2024 日本 PHP 研討會

預定義常數

以下常數由此擴充套件定義,並且只有在擴充套件已編譯到 PHP 中或在執行階段動態載入時才會可用。

PDO::PARAM_BOOL (整數)
表示布林資料類型。
PDO::PARAM_NULL (整數)
表示 SQL NULL 資料類型。
PDO::PARAM_INT (整數)
表示 SQL INTEGER 資料類型。
PDO::PARAM_STR (整數)
表示 SQL CHAR、VARCHAR 或其他字串資料類型。
PDO::PARAM_STR_NATL (整數)
用於表示字串使用國家字元集的旗標。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)
指定參數為預存程序的 INOUT 參數。您必須將此值與明確的 PDO::PARAM_* 資料類型進行位元或運算。
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 每個欄位名稱只返回一個值。
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)
指定 fetch 方法應回傳 TRUE,並將結果集中的欄位值賦值給使用 PDOStatement::bindParam()PDOStatement::bindColumn() 方法綁定的 PHP 變數。
PDO::FETCH_COLUMN (int)
指定 fetch 方法應只從結果集的下一行返回單個請求的欄位。
PDO::FETCH_CLASS (int)
指定 fetch 方法應返回所請求類別的新實例,將欄位映射到類別中的命名屬性。

注意如果請求的類別中不存在該屬性,則會呼叫魔術方法 __set()

PDO::FETCH_INTO (int)
指定 fetch 方法應更新所請求類別的現有實例,將欄位映射到類別中的命名屬性。
PDO::FETCH_FUNC (int)
允許完全自訂動態處理數據的方式(僅在 PDOStatement::fetchAll() 內有效)。
PDO::FETCH_GROUP (int)
根據值分組返回結果。通常與 PDO::FETCH_COLUMNPDO::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 (整數)
關於此屬性的更多資訊,請參閱錯誤與錯誤處理章節。
PDO::ATTR_SERVER_VERSION (整數)
這是一個唯讀屬性;它將返回 PDO 連線的資料庫伺服器版本資訊。
PDO::ATTR_CLIENT_VERSION (整數)
這是一個唯讀屬性;它將返回 PDO 驅動程式使用的用戶端程式庫版本資訊。
PDO::ATTR_SERVER_INFO (整數)
這是一個唯讀屬性;它將返回 PDO 連線的資料庫伺服器的一些中繼資訊。
PDO::ATTR_CONNECTION_STATUS (整數)
PDO::ATTR_CASE (整數)
使用 PDO::CASE_* 常數將欄位名稱強制轉換為特定大小寫。
PDO::ATTR_CURSOR_NAME (整數)
取得或設定游標的名稱。在使用可捲動游標和定位更新時最有用。
PDO::ATTR_CURSOR (整數)
選擇游標類型。PDO 目前支援 PDO::CURSOR_FWDONLYPDO::CURSOR_SCROLL。除非您知道需要可捲動游標,否則請堅持使用 PDO::CURSOR_FWDONLY
PDO::ATTR_DRIVER_NAME (整數)
返回驅動程式的名稱。

範例 #1 使用 PDO::ATTR_DRIVER_NAME

<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
echo
"在 mysql 上運行;在此處執行 mysql 特定的操作\n";
}
?>

PDO::ATTR_ORACLE_NULLS (整數)
在擷取資料時,將空字串轉換為 SQL NULL 值。
PDO::ATTR_PERSISTENT (整數)
請求永久連線,而不是建立新連線。有關此屬性的更多資訊,請參閱連線與連線管理
PDO::ATTR_STATEMENT_CLASS (整數)
設定返回語句的類別名稱。
PDO::ATTR_FETCH_CATALOG_NAMES (整數)
將包含的目錄名稱加到結果集中返回的每個欄位名稱之前。目錄名稱和欄位名稱之間用小數點 (.) 分隔。此屬性的支援取決於驅動程式層級;您的驅動程式可能不支援。
PDO::ATTR_FETCH_TABLE_NAMES (整數)
將包含資料表名稱加在結果集中返回的每個欄位名稱之前。資料表名稱和欄位名稱之間用一個點 (.) 字元分隔。此屬性的支援取決於驅動程式層級;您的驅動程式可能不支援。
PDO::ATTR_STRINGIFY_FETCHES (整數)
強制將所有擷取的值視為字串。
PDO::ATTR_MAX_COLUMN_LEN (整數)
設定欄位名稱的最大長度。
PDO::ATTR_DEFAULT_FETCH_MODE (整數)
PDO::ATTR_EMULATE_PREPARES (整數)
PDO::ATTR_DEFAULT_STR_PARAM (整數)
設定預設的字串參數類型,可以是 PDO::PARAM_STR_NATLPDO::PARAM_STR_CHAR 其中之一。 PHP 7.2.0 起可用。
PDO::ERRMODE_SILENT (整數)
發生錯誤時不產生錯誤或例外。開發人員應明確檢查錯誤。這是預設模式。有關此屬性的更多資訊,請參閱錯誤和錯誤處理
PDO::ERRMODE_WARNING (整數)
發生錯誤時發出 PHP E_WARNING 訊息。有關此屬性的更多資訊,請參閱錯誤和錯誤處理
PDO::ERRMODE_EXCEPTION (整數)
發生錯誤時拋出 PDOException 例外。有關此屬性的更多資訊,請參閱錯誤和錯誤處理
PDO::CASE_NATURAL (整數)
保留資料庫驅動程式返回的欄位名稱。
PDO::CASE_LOWER (整數)
強制將欄位名稱轉換為小寫。
PDO::CASE_UPPER (整數)
強制將欄位名稱轉換為大寫。
PDO::NULL_NATURAL (整數)
PDO::NULL_EMPTY_STRING (整數)
PDO::NULL_TO_STRING (整數)
PDO::FETCH_ORI_NEXT (整數)
擷取結果集中的下一列。僅適用於可捲動的游標。
PDO::FETCH_ORI_PRIOR (整數)
擷取結果集中前一列的資料。僅適用於可捲動的游標。
PDO::FETCH_ORI_FIRST (整數)
擷取結果集中的第一列資料。僅適用於可捲動的游標。
PDO::FETCH_ORI_LAST (整數)
擷取結果集中的最後一列資料。僅適用於可捲動的游標。
PDO::FETCH_ORI_ABS (整數)
從結果集中根據列號擷取指定的列。僅適用於可捲動的游標。
PDO::FETCH_ORI_REL (整數)
根據相對於游標在結果集中目前位置的相對位置擷取指定的列。僅適用於可捲動的游標。
PDO::CURSOR_FWDONLY (整數)
建立一個具有僅向前游標的 PDOStatement 物件。這是預設的游標選項,因為它是 PHP 中最快且最常用的資料存取模式。
PDO::CURSOR_SCROLL (整數)
建立一個具有可捲動游標的 PDOStatement 物件。傳遞 PDO::FETCH_ORI_* 常數來控制從結果集中擷取的列。
PDO::ERR_NONE (字串)
對應於 SQLSTATE '00000',表示 SQL 陳述式已成功執行,沒有錯誤或警告。當檢查 PDO::errorCode()PDOStatement::errorCode() 以確定是否發生錯誤時,此常數可方便使用。通常,透過檢查引發錯誤狀況的方法的返回碼,您就可以知道是否發生錯誤。
PDO::PARAM_EVT_ALLOC (整數)
配置事件
PDO::PARAM_EVT_FREE (整數)
釋放事件
PDO::PARAM_EVT_EXEC_PRE (整數)
在執行準備好的陳述式之前觸發的事件。
PDO::PARAM_EVT_EXEC_POST (整數)
在執行準備好的陳述式之後觸發的事件。
PDO::PARAM_EVT_FETCH_PRE (整數)
從結果集中擷取結果之前觸發的事件。
PDO::PARAM_EVT_FETCH_POST (整數)
從結果集中擷取結果之後觸發的事件。
PDO::PARAM_EVT_NORMALIZE (整數)
在繫結參數註冊期間觸發的事件,允許驅動程式標準化參數名稱。
PDO::SQLITE_DETERMINISTIC (整數)
指定使用 PDO::sqliteCreateFunction() 建立的函式是確定性的,也就是在單個 SQL 陳述式中,給定相同的輸入,它總是會返回相同的結果。(PHP 7.1.4 版本開始提供。)
新增註釋

使用者貢獻的註釋 6 則註釋

sam at xnet dot tk
11 年前
需要注意的是,PDO::FETCH_CLASS 會在設定值(或呼叫 __set)*之後* 才呼叫建構子。
kevin at kevinlocke dot name
5 年前
PDO::PARAM_STR_CHAR 和 PDO::PARAM_STR_NATL 必須與 PDO::PARAM_STR 使用位元或運算來進行參數綁定。

這些旗標控制值引用(例如 PDO::quote),並且在某些情況下(見下文),參數綁定(例如 PDO::bindParam、PDO::bindValue)會在字串字面值前加上 N'',如 SQL-92 中所定義。從 PHP 7.3 開始,只有 dblib 和 mysql 支援這些旗標。對於 mysql 驅動程式,只有在 PDO::ATTR_EMULATE_PREPARES 為 true(預設值)時,這些旗標才會影響參數綁定。

無論 `SET NAMES` 或 charset 參數為何,MySQL 和 MariaDB 都會將字首為 N 的字串字面值解釋為 utf8(而非 utf8mb4)。如果資料庫/資料表/欄位的字元集不是 utf8,這可能會造成問題。例如,在使用 utf8mb4 的資料庫中,查詢 "SELECT * FROM table WHERE col = :param" 並使用 bindValue(":param", "\u{1F600}", PDO::PARAM_STR | PDO::PARAM_STR_NATL) 將會導致 "PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='". 使用 PDO::PARAM_STR 而不要使用 PDO::PARAM_STR_NATL,並確保正確設定 charset DSN 參數可以避免此問題。

參見
https://wiki.php.net/rfc/extended-string-types-for-pdo
https://mariadb.com/kb/en/library/string-literals/
https://mysqldev.dev.org.tw/doc/refman/8.0/en/string-literals.html
Sébastien
4 年前
PDO::FETCH_UNIQUE 不僅擷取唯一值,它還會使用第一個 SQL 欄位作為陣列鍵結果,這對於快速建立索引非常有用,例如

<?php

$sql
= <<<SQL
SELECT ALL
c1, -- 作為結果索引
c1, c2
FROM (
VALUES
ROW('ID-1', '值 1'),
ROW('ID-2', '值 2a'),
ROW('ID-2', '值 2b'),
ROW('ID-3', '值 3')
) AS t (c1, c2);
SQL;
$result = $pdo->query($sql);
print_r($result->fetchAll(PDO::FETCH_UNIQUE));

/*
結果:
ID-1 => [c1 => ID-1, c2 => 值 1]
ID-2 => [c1 => ID-2b, c2 => 值 2b]
ID-3 => [c1 => ID-3, c2 => 值 3]
*/

?>
todd at toddwiggins dot com dot au
4 年前
所有 PDO::MYSQL_* 常數的參考資料可以在 MySQL 的驅動程式文件中找到:https://mysqldev.dev.org.tw/doc/connectors/en/apis-php-pdo-mysql.html

例如我正在尋找的 PDO::MYSQL_ATTR_SSL_CA 和 PDO::MYSQL_ATTR_SSL_CAPATH,但此頁面並未列出。
happy dot job7348 at fastmail dot com
10 個月前
要綁定浮點數,請使用 bindValue 搭配 PDO::PARAM_STR。您可以省略 PDO::PARAM_STR,因為它是預設選項。使用 bindParam 綁定會將綁定變數的類型更改為字串,這可能會導致類型錯誤。
To Top