2024 年 PHP Conference Japan

PDOStatement::errorCode

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

PDOStatement::errorCode 取得與敘述句柄上最後一次操作相關聯的 SQLSTATE

說明

public PDOStatement::errorCode(): ?string

參數

此函式沒有參數。

回傳值

PDO::errorCode() 相同,除了 PDOStatement::errorCode() 只會擷取使用 PDOStatement 物件執行的操作的錯誤碼。

範例

範例 #1 擷取 SQLSTATE 碼

<?php
/* 觸發錯誤 -- BONES 資料表不存在 */
$err = $dbh->prepare('SELECT skull FROM bones');
$err->execute();

echo
"\nPDOStatement::errorCode(): ";
print
$err->errorCode();
?>

以上範例將輸出

PDOStatement::errorCode(): 42S02

另請參閱

新增註釋

使用者貢獻的註釋 2 個註釋

15
vaclav dot sir at gmail dot com
18 年前
敘述的 errorCode() 在執行前返回空字串,成功執行後返回 '00000'(五個零)

<?php
$stmt
= $pdo->prepare($query);
assert($stmt->errorCode === '');

$stmt->execute();
assert($stmt->errorCode === '00000');
?>
0
dbeecher at tekops dot com
16 年前
如果您建立了自己的例外處理程式,則此屬性和 PDOStatement::errorInfo() 屬性都無法使用。

我使用的是 PHP 5.2.4,PDO_INFORMIX 1.2.0。

在設定自己的例外處理程式後,在程式的任何位置進行此呼叫都會產生錯誤

PHP 通知:未定義的屬性:PDOStatement::$errorCode,位於 new_query.php 的第...行



PHP 通知:未定義的屬性:PDOStatement::$errorInfo,位於 new_query.php 的第...行

但如果我將 PDO 設定為 SILENT,僅使用以下程式碼設定錯誤碼

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)

然後使用 if/else 處理對此函數的呼叫即可正常運作。以下範例僅執行錯誤檢查以顯示此函數的結果碼。通常您會需要更多。

失敗

$dbh = new PDO("informix...")
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
$result = $dbh->query("asdfkjasdfkjasdfjk"); /* 明顯的 SQL 錯誤 */
if ($result) print "success!";
}
catch
{
$myeCode = $dbh->errorCode();
/* 處理錯誤 */
};

$dbh=0;

錯誤處理器被呼叫,但卻不知道 $dbh->errorCode 或 $dbh->errorInfo 的任何資訊。

有效

$dbh = new PDO("informix...")
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);

$result = $dbh->query("asdfkjasdfkjasdfjk"); /* 明顯的 SQL 錯誤 */
if ($result)
{
/* 處理結果 */
print "成功!";

/* 全部完成,沒有進行任何更改 */
$dbh->rollback();
}
else
{
$myeCode = $dbh->errorCode();
print_r($myeCode);
};

$dbh=0; /* 關閉連線 */

希望這能幫助到其他人。
敬上,
David
To Top