我需要找到一种方法(如果可能的话)使 PHP 类接受 PgSql\Result 对象作为属性。 PHP 8.1+ 已将 pgsql result 资源迁移到 PgSQL\Result 实例。 在 PHP 的早期版本中,我可以像这样设置属性:
var $results;
....
$this->results = pg_query($conn, "SELECT author, email FROM authors");
但是该操作现在会导致:
PHP 致命错误:未捕获异常:[无活动文件] 中不允许序列化“PgSql\Result”
本页详细介绍了 PHP 8.1 中的相关更改: https://php.watch/versions/8.1/PgSQL-resource
尝试将该属性声明为 PgSQL\Result 对象,但不成功。 我可能声明错误。 我对 OOP 不是特别精通。
用最简单的话来说,这就是我想要的工作——如果可能的话:
class foo
{
var $results; // or whatever needs to replace 'var' to get it to work with a PgSql\Result object
function __construct()
{
$this->results = pg_query($conn, "SELECT author, email FROM authors");
}
}
---------------------
$x = new foo();
$row = pg_fetch_row($x->results);
感谢所有回复的人。 我发现此操作是在“会话”对象上“直接”执行的。 如果我创建一个非会话对象,代码可以正常工作。 至于为什么 SELECT 例程发生在构造函数内部,我所能想到的只是创建此应用程序的人希望使代码维护尽可能困难。