PostgreSQL中与MySQL errno相当的内容

3

我正在将一个PHP脚本从MySQL转换为PostgreSQL。

我认为mysqli_errno的等效物是pg_last_error,这样可以吗?如果不行,请您提供一种替代方案。

2个回答

3

你说得对。你可以使用pg_last_error()来获取连接的最后一个错误。

例如:

pg_connect(...) or die('Could not connect: ' . pg_last_error());

1

我不同意Francois Deschene的答案。

不幸的是,pg API似乎比MySQLi API弱一些。我考虑过使用PDO,但我还没有深入研究过。

为了回答你的问题,你需要走一些弯路才能得到与"mysqli_errno"相当的东西(也就是实际的错误编号)。pg_last_error()返回一个字符串,而不是一个数字。而数字更容易处理。

http://www.postgresql.org/docs/8.1/static/errcodes-appendix.html

无论如何,要获取错误数字,您将不得不使用一系列函数。

pg_send_query_params(blah blah); // or pg_send_query() if you don't use prepared statements
$result = pg_get_result($connection);
$result_status = pg_result_status($result);
$mysqli_errno_equivalent = pg_result_error_field($result_status, PGSQL_DIAG_SQLSTATE);

希望有人能提出更简单的解决方案。但这是我在我的代码中一直在使用的方法(因为PostgreSQL附录A中的错误号比完整的错误字符串更容易处理)。

幸运的是,编写一个简单的包装器来避免重复操作非常容易。

文档似乎暗示这是获取数字的最佳方式。http://www.php.net/manual/en/function.pg-result-error-field.php


PostgreSQL协议支持广泛的错误报告细分,但PHP驱动程序(至少在编写本文时)没有提供访问它的方式。 - Craig Ringer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接