8

を介して生成されたPDOStatementオブジェクトPDO->query($query)があるとします。それが実行されたテーブルを取得することは可能ですか?

このようなもの:

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

使用できることは十分承知して$query->getColumnMeta(0)['table']いますが、 docsで述べられているように、あまり安全ではありません。これは、すべての PDO ドライバーで機能する必要があります。

4

3 に答える 3

1

連想配列を取得する PDOStatement を使用して、テーブルの名前を取得できます。値 ['name'] はテーブルの名前です。

    $select = $conn_pdo->query('SELECT * FROM foo');
    $meta = $select->getColumnMeta(0);
    echo "Name of table: ".$meta['table'];
于 2015-06-10T16:51:35.400 に答える
0

クエリで使用される文字列を単純に格納し、単純な文字列操作を使用してテーブルにアクセスすることはできませんか?

于 2012-11-11T21:56:19.353 に答える
0

クエリ文字列を確認できます。

$statement->queryString

SQL クエリは複数のテーブルを参照する場合もあれば、テーブルを参照しない場合もあるため、「実行されたテーブル」は存在しないことに注意してください。クエリ文字列で正規表現を使用して、標準クエリ ( SELECTINSERTUPDATEDELETE) で参照される最初のテーブルを見つけることができますが、それは完全ではない可能性があります。

または、モデルを使用してデータにアクセスすると、モデル定義によってアクセスされるテーブルが常にわかります。

于 2012-10-18T21:55:35.013 に答える