请注意,与其他 DB 扩展中的等效函数不同,跳过资源参数并不等同于“只获取最后一个错误”。
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_error — 返回发现的最后一个错误
返回发现的最后一个错误。
该函数应该在错误发生后立即调用。错误被成功的语句清除。
connection_or_statement
对于大多数错误,connection_or_statement
是传递给失败函数调用的资源句柄。对于使用 oci_connect()、oci_new_connect() 或 oci_pconnect() 的连接错误,应该传递 null
。
如果未发现错误,oci_error() 返回 false
。否则,oci_error() 返回错误信息作为关联数组。
数组键 | 类型 | 说明 |
---|---|---|
code |
int | Oracle 错误号。 |
message |
string | Oracle 错误文本。 |
offset |
int | SQL 语句中错误的字节位置。如果没有语句,则为 0 |
sqltext |
string | SQL 语句文本。如果没有语句,则为空字符串。 |
版本 | 说明 |
---|---|
8.0.0, PECL OCI8 3.0.0 |
connection_or_statement 现在可以为空。 |
示例 #1 显示连接错误后的 Oracle 错误消息
<?php
$conn = oci_connect("hr", "welcome", "localhost/XE");
if (!$conn) {
$e = oci_error(); // 对于 oci_connect 错误,不传递句柄
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>
示例 #2 显示解析错误后的 Oracle 错误消息
<?php
$stid = oci_parse($conn, "select ' from dual"); // 注意不匹配的引号
if (!$stid) {
$e = oci_error($conn); // 对于 oci_parse 错误,传递连接句柄
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>
示例 #3 显示 Oracle 错误消息、有问题的语句以及执行错误问题的执行位置
<?php
$stid = oci_parse($conn, "select does_not_exist from dual");
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid); // 对于 oci_execute 错误,传递语句句柄
print htmlentities($e['message']);
print "\n<pre>\n";
print htmlentities($e['sqltext']);
printf("\n%".($e['offset']+1)."s", "^");
print "\n</pre>\n";
}
?>