2011-07-05 42 views
2

我将一个PHP脚本从MySQL转换为PostgreSQL。postgresql相当于mysql errno

我以为相当于mysqli_errnopg_last_error,没关系吗?如果不是,你能否提出一个替代方案?

回答

3

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

例子:

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

我与弗朗索瓦Deschene的答复不同意。

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

为了回答你的问题,你必须要稍微偏离方法来获得相当于“mysqli_errno”(即实际的错误编号)。 pg_last_error()返回一个字符串,而不是一个数字。数字处理起来更容易一些。

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

无论如何,得到错误NUMBER,你将不得不使用的功能的组合。

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

+0

PostgreSQL *协议*支持广泛的错误报告分解,PHP驱动程序(至少在写入时)只是不提供访问它的方法。 –