0

我有以下代码:

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

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

我知道这没有足够的信息,但我不明白为什么代码只有在我评论 fetchAll 行时才会执行。当该行执行时,我什么也没有得到,只是空白浏览器,没有错误或任何东西。在萤火虫的响应是空白的......它会是什么?

4

2 回答 2

6

您正在做和的笛卡尔积。这可能是一个巨大的数据量。tabletable2

对于表中的每一行,您将获得table2. 因此,如果table有 100 行,而 table2 有 500 行,您的查询将尝试获取 50.000 行。

你要么想要一个 JOIN:

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 回答