PDORow 是一个内部类,文档很少。它甚至不在手册中(搜索结果)。
查看 PDORow 的唯一方法是 FETCH_LAZY:
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->bindValue(':id', 1, PDO::PARAM_INT);
$stmt->execute();
$lazy = $stmt->fetch(PDO::FETCH_LAZY);
有趣的是它的所有属性都是公开的。第一个,“queryString”,与 sql 查询相关联。这是某种代理。
您可以将它重用于进一步的语句,以获取完整的对象。获取 PDORow(几乎)不会增加内存使用量。它不是可序列化的,并且在其上调用未定义的属性不会引发错误。
有关它的更多信息,请访问 phpdelusions.net
使用 fetch lazy 时从 PDO 返回的对象不是 stdclass 对象,它们是 pdorow 类型并且具有一些神奇的功能,包括延迟数据获取 - 这对于 pdo _ 驱动程序的设置方式有点模糊
你可以关注这个有趣的讨论。
从 php-src 中,我们可以看到 PDORow 并不是要实例化的
您可以在 pdo_stmt.c 中看到有关该类的一些详细信息
Ctrl+F PDORow 其余部分
编辑
FETCH_LAZY 的一个可能用例是:
// get the lazy object - aka, PDORow
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->bindValue(':id', 100, PDO::PARAM_INT);
$stmt->execute();
$lazy = $stmt->fetch(PDO::FETCH_LAZY);
接下来,重用它:
// do whatever you please with the properties, since they're all public
$publicProps = get_object_vars($lazy);
然后,如果需要,加载真实对象:
// loading lazy object
$stmt = $pdo->prepare($publicProps['queryString']);
$stmt->bindValue(':id', $publicProps['id'], PDO::PARAM_INT);
/** you could use a regex to get an array of parameters' names prefixed by ':' in the original queryString
* eg, $queryString = 'SELECT * FROM users WHERE firstName = :firstName AND email = :email';
* preg_match_all('/:[^\s]+/', $queryString, $matches);
* would give you an array with ":firstName" and ":email"
*/
$stmt->execute([':id' => $publicProps['id']]);
$notLazy = $stmt->fetch();