0

次のコードがあります。

    $sql = "SELECT table.field, table2.field2 FROM
                table, table2";
    $stmt = $this->db->prepare($sql);
    $stmt->execute();

    $x = $stmt->fetchAll(PDO::FETCH_ASSOC);

情報が不十分であることはわかっていますが、fetchAll 行にコメントを付けた場合にのみコードが実行される理由がわかりません。その行が実行されると、何も表示されず、ブラウザが空白になり、エラーも何も表示されません。firebug では、応答が空白です...何ができますか??

4

2 に答える 2

6

とのデカルト積を実行しています。これは膨大な量のデータになる可能性があります。tabletable2

テーブルの各行について、のすべての行を取得していますtable2。したがって、tableが100行で、table2が500行の場合、クエリは50.000行をフェッチしようとします。

参加する必要があります:

SELECT table.field, table2.field2 
FROM table 
JOIN table2 
ON table.field3 = table2.field3

またはUNION

SELECT table.field AS FIELDNAME FROM table
UNION ALL
SELECT table2.field2 AS FIELDNAME FROM table2

デカルト積が本当に必要なものである場合は、LIMITを追加して、それが機能するかどうかを確認してください。その後、制限を増やすか削除します

SELECT table.field, table2.field2 
FROM table, table2 LIMIT 10

テーブルに何が含まれているかによって異なります(実際には十分な情報を提供していません)。

于 2011-08-25T19:15:56.693 に答える
0

エラーをキャッチするには、error_reporting と display_errors を有効にする必要があります。この動作の原因は、「許可されたメモリ制限」が発生したことだと思います。db から取得する行が多すぎる可能性があります。

ini_set('memory_limit', '256M') を追加して、動作を確認してみてください。

于 2011-08-25T19:18:09.463 に答える