在foreach循环中的MySQL查询在给一个包含多于一个项目的数组输入数据时不会返回结果

问题描述:

正如标题所述,如果数组中有多个项目,我似乎无法获得任何查询的结果。在foreach循环中的MySQL查询在给一个包含多于一个项目的数组输入数据时不会返回结果

上传的代码在这里: http://www.text-upload.com/read.php?id=44739&c=8286678

{  
$keywords_array = array("foo","bar","rawr");  
echo "<ul>";  
foreach($keywords_array as $keyword) 
{  
// Clean keywords 
$keyword = strtolower($keyword); 

// Check to see if keyword is a "name" 

$keyword_check_name_result = mysql_query(" 
    select * FROM `some_table` 
       WHERE name = '$keyword'") or die (mysql_error()); 

$keyword_check_name_total = mysql_num_rows($keyword_check_name_result); 

// check 
echo "keyword_check_name_total for $keyword: $keyword_check_name_total<br /> 
select * FROM `some_table` WHERE name = '$keyword'"; 

if($keyword_check_name_total > 0) 
{ 
    echo "<li><a href=\"$link/$keyword.html\">$keyword</a></li>"; 
} 
} 

echo "</ul>"; 

} 

如果$keywords_array = array("foo");只,然后$keyword_check_name_total = 1。 但是如果我有$keywords_array = array("foo","bar","rawr");,那么每个循环都有$keyword_check_name_total = 0

+1

你为什么不尝试使用 SELECT COUNT(*)FROM`some_table`其中name = '$关键字'”的 而不是使用mysql_num_rows()?我不知道这是根问题,但无论如何,这是一个很好的做法,当你需要获得总行数时使用count(*)。 – itsmeee 2011-01-29 17:42:05

+1

为什么你在* t​​ext * -upload.com上发布你的代码?它不仅仅是文本,它是代码。此外,如果有人想帮助你,它会创建一个链接点击,并且很多人会感到懒惰。 – greg0ire 2011-01-29 17:45:39

你已经发布的代码是在资源方面有点浪费,你应该尝试类似以下内容:

<?php 

$array = array("foo","bar","test"); 
$query = mysql_query("SELECT COUNT(name) as countVal, name FROM test WHERE name IN('".strtolower(implode("','",$array))."') GROUP BY name"); 
$total = 0; 
while($row = mysql_fetch_assoc($query)){ 
     echo "name = ".$row['name'].", count = ".$row['countVal']."<br />"; 
     $total += $row['countVal']; 
} 
echo "total = ".$total; 

编辑:

事情是这样的:

<?php 

    $array = array("foo","bar","test"); 
    $query = mysql_query("SELECT name, link FROM test WHERE name IN('".strtolower(implode("','",$array))."')"); 
    $total = 0; 
    while($row = mysql_fetch_assoc($query)){ 
     echo "<a href=\"".$row['link']."/".$row['name']."\">".$row['name']."</a>"; 
    } 

我个人记得num_rows是不可靠的,但我不记得原因。

MySQL参考页(http://dev.mysql.com/doc/refman/5.0/en/mysql-num-rows.html)提供了一个可能的原因,你收到一个计数0:

如果使用了mysql_use_result(),mysql_num_rows()不返回正确的值,直到所有的行结果集已被检索。