假设我有一个PDOStatement通过 生成的对象PDO->query($query),是否可以获得执行它的表?
像这样的东西:
<?php
$statement = $pdo->query('SELECT * FROM `foo`;');
echo $statement->xyz;
// foo
我完全知道您可以使用$query->getColumnMeta(0)['table']它来执行此操作,但正如 docs 所述,它不是很安全。这需要适用于所有 PDO 驱动程序。
假设我有一个PDOStatement通过 生成的对象PDO->query($query),是否可以获得执行它的表?
像这样的东西:
<?php
$statement = $pdo->query('SELECT * FROM `foo`;');
echo $statement->xyz;
// foo
我完全知道您可以使用$query->getColumnMeta(0)['table']它来执行此操作,但正如 docs 所述,它不是很安全。这需要适用于所有 PDO 驱动程序。
您可以使用检索关联数组的 PDOStatement 检索表的名称。值 ['name'] 是表的名称。
$select = $conn_pdo->query('SELECT * FROM foo');
$meta = $select->getColumnMeta(0);
echo "Name of table: ".$meta['table'];
您不能简单地存储查询中使用的字符串并使用简单的字符串操作来访问表吗?
您可以检查查询字符串:
$statement->queryString
请记住,SQL 查询可能引用多个表,或者没有表,因此没有“执行它的表”。您可以在查询字符串上使用正则表达式来查找标准查询(SELECT、INSERT、UPDATE、DELETE)引用的第一个表,但这可能并不完美。
或者,使用模型来访问您的数据,您将始终知道模型定义访问了哪些表。