Php Sql查询仅打印第一行
我用php编写代码,代码从数组中获取数据,从mysql数据库中获取额外数据。因为我需要来自两个不同表的数据,所以我使用嵌套while循环。但是下面的代码总是只打印一次(echo“a:.$data3[2];或echo“b:.$data3[2];):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);
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开发的重要和基本概念。