Php Sql查询仅打印第一行

Php Sql查询仅打印第一行,php,sql,mysql,Php,Sql,Mysql,我用php编写代码,代码从数组中获取数据,从mysql数据库中获取额外数据。因为我需要来自两个不同表的数据,所以我使用嵌套while循环。但是下面的代码总是只打印一次(echo“a:.$data3[2];或echo“b:.$data3[2];): foreach($stuff as $key) { $query3 = "SELECT * FROM foobar WHERE id='$key'"; $result3 = MySQL_query($query3, $link_id);

我用php编写代码,代码从数组中获取数据,从mysql数据库中获取额外数据。因为我需要来自两个不同表的数据,所以我使用嵌套while循环。但是下面的代码总是只打印一次(echo“a:.$data3[2];或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
$key_array = "";
foreach($stuff as $key)
{
    $key_array .= ",'" . mysql_real_escape_string($key) . "'";
}
$key_array = substr($key_array, 1);
您只需遍历一个数组

而且,看起来您实际上只选择了一行,所以吐出一行是预期的行为

此外,请使用以下方法防止SQL注入:

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

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

SELECT
    img.*
FROM
    foobar foo
    INNER JOIN foobar_img img ON
        foo.id = img.id
WHERE
    foo.id = $key
$key_array = "";
foreach($stuff as $key)
{
    $key_array .= ",'" . mysql_real_escape_string($key) . "'";
}
$key_array = substr($key_array, 1);

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


我还将指出,它看起来像是在使用文本主键。整数,增量键最适合PK,我强烈建议你使用它们

首先,改进SQL:

SELECT
    img.*
FROM
    foobar foo
    INNER JOIN foobar_img img ON
        foo.id = img.id
WHERE
    foo.id = $key
$key_array = "";
foreach($stuff as $key)
{
    $key_array .= ",'" . mysql_real_escape_string($key) . "'";
}
$key_array = substr($key_array, 1);
您只需遍历一个数组

而且,看起来您实际上只选择了一行,所以吐出一行是预期的行为

此外,请使用以下方法防止SQL注入:

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

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

SELECT
    img.*
FROM
    foobar foo
    INNER JOIN foobar_img img ON
        foo.id = img.id
WHERE
    foo.id = $key
$key_array = "";
foreach($stuff as $key)
{
    $key_array .= ",'" . mysql_real_escape_string($key) . "'";
}
$key_array = substr($key_array, 1);

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


我还将指出,它看起来像是在使用文本主键。整数,增量键最适合PK,我强烈建议你使用它们

您应该在这两个表之间使用联接。这是使用SQL的正确方法,而且工作速度会快得多。在循环中执行额外的查询是不好的做法,就像将循环不变代码放入循环中一样。

您应该在这两个表之间使用联接。这是使用SQL的正确方法,而且工作速度会快得多。在循环中执行额外的查询是不好的做法,就像在循环中放置循环不变代码一样。

这看起来确实是sql注入的主要候选。尖沙咀。这看起来确实是sql注入的主要候选。尖沙咀。更清楚一点,“SELECT*FROM foobar,其中id='$key'”只选择设置了$key的行,我需要使用两个表中的数据!你的例子很管用,但我无法使用它访问来自foo的数据,可以吗?@Hadorkugh:如果你打算在应用程序中使用SQL,你非常需要熟悉SQL。这就是所谓的内部联接,它结合了两个表的结果,这是非常常见的。SQL的强大之处在于它能够非常高效地连接和操作数据集。在学习SQL之前,您需要开始以基于集合的方式进行思考。有关帮助您了解一点SQL的教程,请参见本网站:是的,我需要通读SQL。但现在我需要继续努力,在截止日期前完成任务,然后交付。@Hadorkugh:那你就要受互联网的摆布了。以上是克服这一障碍所需的代码。请在某个时候回顾并理解它,因为它充满了web开发的重要和基本概念。为了让它更清楚一点,“SELECT*FROM foobar,其中id='$key'”只选择设置了$key的行,我需要使用两个表中的数据!你的例子很管用,但我无法使用它访问来自foo的数据,可以吗?@Hadorkugh:如果你打算在应用程序中使用SQL,你非常需要熟悉SQL。这就是所谓的内部联接,它结合了两个表的结果,这是非常常见的。SQL的强大之处在于它能够非常高效地连接和操作数据集。在学习SQL之前,您需要开始以基于集合的方式进行思考。有关帮助您了解一点SQL的教程,请参见本网站:是的,我需要通读SQL。但现在我需要继续努力,在截止日期前完成任务,然后交付。@Hadorkugh:那你就要受互联网的摆布了。以上是克服这一障碍所需的代码。请回顾并理解它,因为它充满了web开发的重要和基本概念。