是否可以从PDOStatement对象获取表?

Nat*_*iel 8 php database pdo

假设我有一个PDOStatement生成的对象PDO->query($query),是否可以获取它所执行的表?

像这样的东西:

<?php
$statement = $pdo->query('SELECT * FROM `foo`;');
echo $statement->xyz;
// foo
Run Code Online (Sandbox Code Playgroud)

我完全知道你可以$query->getColumnMeta(0)['table']用来做,但正如文档中所提到的,它不是很安全.这需要适用于所有PDO驱动程序.

Rya*_*n P 0

您可以检查查询字符串:

$statement->queryString
Run Code Online (Sandbox Code Playgroud)

请记住,SQL 查询可能引用多个表,也可能不引用任何表,因此不存在“执行该查询的表”。您可以在查询字符串上使用正则表达式来查找标准查询引用的第一个表(SELECT, INSERT, UPDATE, DELETE),但这可能并不完美。

或者,使用模型来访问您的数据,您将始终知道模型定义访问了哪些表。