PostgreSQL:从`pg_convert()`获取错误消息

时间:2016-06-15 14:26:19

标签: php postgresql error-handling

我试图诊断只在生产系统上发现的问题,并且我试图改进pg_convert()引发的错误的错误报告,但不知道该去哪里。我尝试将开发环境中的代码更改为:

$converted_values = pg_convert($cnx, $table, $values);
if ($converted_values === FALSE)
    throw new Exception("Failed to insert record: '".pg_last_error($cnx)."' using values: ".var_export($values, true));

pg_last_error()没有返回任何内容。

注意:我通过尝试将空值插入NOT NULL列来测试上述内容。除了pg_last_error()没有得到快乐之外,日志中还有一些PHP注意事项。生产日志没有任何此类通知。只是pg_convert()的空返回值:(

我在Debian 8.3和PHP 5.6.22上运行PostgreSQL 9.4.6。

2 个答案:

答案 0 :(得分:1)

据我所知,试图完成任务w / pg_convert()是一个萧条。它在处理不同数据方面不太可靠,并且在列名称周围加上双引号是不一致的。如果您使用pg_convert(),则可能需要转换为预准备语句。他们所做的是非常不同的,所以你可能必须对你的代码库进行根本性的改变,但我们做了改变,它似乎对我们有用。

编辑:pg_convert() / pg_query()似乎能够滚动而pg_execute()没有的一个问题是,空字符串分配给整数列{{1没有设置。为了解决这个问题(至少目前为止)我不得不:

  • 循环传递给NOT NULL
  • 的数组
  • 当我找到一个空字符串
  • 时调用pg_execute()
  • 确定目标列是否为整数(注意:可能有很多方法可以表示整数列的类型)然后是否允许空值
  • 覆盖空字符串w / null。

答案 1 :(得分:0)

将NULL插入NOT NULL列不会在pg_convert中触发错误。错误将由连接问题,缺少的表或缺少的列,或无法从PHP结构转换为数据库中的类型的数据(例如,单词转换为数字)引起。