为什么只返回数组的第一个元素?

时间:2010-09-26 17:52:17

标签: php mysql

$count =0;
$result1 = mysql_query("SELECT fwid FROM sbsw WHERE fword = '".$searchText."'");
while ($result2= mysql_fetch_array($result1))
{
$result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2[$count]."'");   
$result4= mysql_fetch_array($result3);
print $result4[$count].'<br>';
$count++;
}

mysql_free_result($result1);
mysql_free_result($result3);

2 个答案:

答案 0 :(得分:1)

让我们看一下mysql_fetch_array的工作原理 - 例如,如果您有像

这样的表结构
id | name | surname | role 

 1    John   Smith    user
 2    Peter  Qeep     user
 3    Mark   Ziii     admin

当您执行查询SELECT * FROM table然后循环$result = mysql_fetch_array($query)时,$result将始终是包含

的数组(4)
[0] => id,
[1] => name,
[2] => surname,
[3] => role

因此,当您执行查询$result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2[$count]."'");时,在第一次迭代中,$count将是0,这是上一个查询返回的结果的关键,但是在任何进一步的迭代它会增加,这将导致一个未定义的密钥。这意味着您必须停止使用变量$count,而只需使用$result2[0]

此外,更好的方法是使用MySQL JOIN,在您的示例中它将是SELECT w.fsyn FROM sbsw s JOIN wrsyn w ON s.fwid = w.fwid WHERE s.fword = "'.$searchText.'";

答案 1 :(得分:0)

请使用合理的变量名称并正确缩进。您从每一行获得一列,因为您只对每行重复打印一次。

基本上:对于每一行,打印一列的值。

$ count-variable决定了哪一列,但它显然没有意义,它计算你所在的行。

这样的事情应该这样做:(未经测试)

$result1 = mysql_query("SELECT fwid FROM sbsw WHERE fword = '".$searchText."'");
while ($result2= mysql_fetch_array($result1))
{
   $result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2['fwid']."'");   
   $result4= mysql_fetch_row($result3);
   for($x = 0; $x < count($result4); $x++){
       print $result4[$x].'<br>';
   }
}

mysql_free_result($result1);
mysql_free_result($result3);

哦,我在内部循环中将fetch_array更改为fetch_row以简化迭代。