敘述的 errorCode() 在執行前返回空字串,成功執行後返回 '00000'(五個零)
<?php
$stmt = $pdo->prepare($query);
assert($stmt->errorCode === '');
$stmt->execute();
assert($stmt->errorCode === '00000');
?>
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::errorCode — 取得與敘述句柄上最後一次操作相關聯的 SQLSTATE
此函式沒有參數。
與 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
敘述的 errorCode() 在執行前返回空字串,成功執行後返回 '00000'(五個零)
<?php
$stmt = $pdo->prepare($query);
assert($stmt->errorCode === '');
$stmt->execute();
assert($stmt->errorCode === '00000');
?>
如果您建立了自己的例外處理程式,則此屬性和 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