PHP Conference Japan 2024

PDO::errorCode

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDO::errorCode擷取與資料庫控制碼上最後一個操作相關聯的 SQLSTATE

說明

public PDO::errorCode(): ?string

參數

此函式沒有參數。

傳回值

傳回一個 SQLSTATE,這是一個在 ANSI SQL-92 標準中定義的五個字元字母數字識別碼。簡而言之,SQLSTATE 由兩個字元的類別值後接三個字元的子類別值組成。類別值 01 表示警告,並伴隨 SQL_SUCCESS_WITH_INFO 的傳回碼。除 '01' 以外的類別值('IM' 類別除外)表示錯誤。'IM' 類別專用於源自 PDO(或者如果您使用的是 ODBC 驅動程式,則可能是 ODBC)本身的警告和錯誤。任何類別中的子類別值 '000' 表示該 SQLSTATE 沒有子類別。

PDO::errorCode() 僅會擷取直接在資料庫句柄上執行的操作之錯誤碼。如果您透過 PDO::prepare()PDO::query() 建立 PDOStatement 物件,並在敘述句柄上引發錯誤,PDO::errorCode() 將不會反映該錯誤。您必須呼叫 PDOStatement::errorCode() 以傳回在特定敘述句柄上執行的操作之錯誤碼。

如果資料庫句柄上未執行任何操作,則會傳回 null

範例

範例 #1 擷取 SQLSTATE 碼

<?php
/* 觸發錯誤 -- BONES 表格不存在 */
$dbh->exec("INSERT INTO bones(skull) VALUES ('lucy')");

echo
"\nPDO::errorCode(): ", $dbh->errorCode();
?>

上述範例將輸出

PDO::errorCode(): 42S02

另請參閱

新增註釋

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

43
Matthias Leuffen
19 年前
嗨,

包含所有 SQL-92 SQLSTATE 返回碼的列表
http://www.unix.org.ua/orelly/java-ent/jenut/ch08_06.htm

使用以下程式碼讓 PDO 在發生錯誤時拋出例外 (PDOException)。

<?PHP
$pdo
= new PDO (whatever);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$pdo->exec ("QUERY WITH SYNTAX ERROR");
} catch (
PDOException $e) {
if (
$e->getCode() == '2A000')
echo
"語法錯誤:".$e->getMessage();
}
?>

再見,
Matthias
To Top