6

データベースのすべてのテーブルをリストとして取得したいと考えています。

クエリで「データベースの表示」を実行しようとしましたが、symfony で定義したクラス (エンティティ) を使用していないため、機能しません。

そして DQL で:

   $em = $this->getDoctrine()->getEntityManager();
   $query = $em->createQuery(
        'show databases');

    $result = $query->getResult();

このエラー:

[Syntax Error] line 0, col 0: Error: Expected SELECT, UPDATE or DELETE, got 'show'

私を助けるアイデアはありますか?

4

5 に答える 5

7

別の回答で述べたように、そのために使用できますDoctrine\DBAL

/** @type \Doctrine\DBAL\Connection $connection */
$connection = ...;

/** @type \Doctrine\DBAL\Schema\MySqlSchemaManager $sm */
$sm = $connection->getSchemaManager();

次に、テーブルを次のようにリストしますArray

var_dump( $sm->listDatabases() );
于 2014-08-08T20:11:49.503 に答える
4

DQL では実行できなかった複雑な SQL ステートメント/関数を使用する必要がある場合がいくつかあります。幸いなことに、Symfony2/doctrine は現在のデータベース接続を取得し、doctrine を完全にバイパスする方法を提供します。

//get connection
$conn = $this->get('database_connection');
//run a query
$users= $conn->fetchAll('select * from users');

ただし、この方法を使用する場合は十分に注意してください。ドクトリンをバイパスしているため、SQL インジェクションなどのセキュリティ上の問題を自分で処理する必要があります。

于 2012-12-27T16:00:09.687 に答える
2

Doctrine は ORM であり、すべてのデータベースをリストすることを意図したものではありません。それに加えて、通常、現在のユーザーにはサーバー内のすべてのデータベースを表示する権限がありません。これは大きなセキュリティ違反であることが判明する可能性があります。

基本的に、doctrine はクエリを解釈する方法を知りません。これにはネイティブ クエリを使用する必要があります: Doctrine Native Query

于 2012-12-27T15:53:09.320 に答える