php - SQL查询只打印第一行

标签 php sql mysql

我在 php 中编码,代码从数组中获取数据以从 mysql 数据库中获取额外数据。因为我需要来自两个不同表的数据,所以我使用了嵌套的 while 循环。但是下面的代码总是只打印一次 (echo "a: ". $data3[2]; or echo "b: ". $data3[2];):

foreach($stuff as $key)
{
    $query3 = "SELECT * FROM foobar WHERE id='$key'";
    $result3 = MySQL_query($query3, $link_id);

    while ($data3 = mysql_fetch_array($result3))
    {
        $query4 = "SELECT * FROM foobar_img WHERE id='$data3[0]'";
        $result4 = MySQL_query($query4, $link_id);

        while ($data4 = mysql_fetch_array($result4))
        {   
            $x += 1;
            if ($x % 3 == 0)
            {
                echo "a: " . $data3[2];
            }
            else
            {
                echo "b: " . $data3[2];
            }
        }
    }
}

最佳答案

首先,也是最重要的,改进你的 SQL:

SELECT
    img.*
FROM
    foobar foo
    INNER JOIN foobar_img img ON
        foo.id = img.id
WHERE
    foo.id = $key

您只需遍历一个数组。

此外,看起来您实际上只选择了一行,因此吐出一行是预期的行为。

此外,请使用 mysql_real_escape_string() 防止 SQL 注入(inject):

$query3 = "SELECT * FROM foobar WHERE id='" . 
     mysql_real_escape_string($key) . "'";

更新:正如 Dan 所暗示的那样,请在您的 MySQL 控制台中运行此查询以获取结果集,这样您就知道您在玩什么。当您将查询限制为一个 ID 时,您可能只会返回一行。也就是说,我不知道 $stuff 中有多少个 $keys,但如果它旋转一次,那么它就是一个。

您最好遍历 $stuff 并为您的 SQL 构建一个 IN 子句:

$key_array = "";
foreach($stuff as $key)
{
    $key_array .= ",'" . mysql_real_escape_string($key) . "'";
}
$key_array = substr($key_array, 1);

...

WHERE foo.id IN ($key_array)

这将为您提供一个包含完整列表的结果集,而不是向数据库发送一堆 SELECT 查询。请善待您的数据库,并尽可能使用基于集合的操作。 MySQL 将不胜感激。

我还要指出,它看起来好像您正在使用文本主键。整数、增量 key 最适合用作 PK,我强烈建议您使用它们!

关于php - SQL查询只打印第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/997671/

相关文章:

php - 使用 Sximo 构建 Laravel 5

php - mysql 查询 - 3 个表 - 无法正确执行

mysql - 有没有办法使用2列来唯一标识MYSQL中的一行?

php - INSERT INTO 数据库表,从表单不起作用。数据库

mysql - 左连接最新记录(如果存在)

php - 使用ajax提交表单数据,无需刷新

php - 在 Symfony2 中处理类 CMS 项目路由的最佳方法是什么

Ubuntu机器上的PHP复制粘贴检测器

sql - "Between"运算符在使用参数时生成错误的查询计划

mysql - mysql 数据库克隆的有效方法/工具