在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
。
答
你已经发布的代码是在资源方面有点浪费,你应该尝试类似以下内容:
<?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()不返回正确的值,直到所有的行结果集已被检索。
你为什么不尝试使用 SELECT COUNT(*)FROM`some_table`其中name = '$关键字'”的 而不是使用mysql_num_rows()?我不知道这是根问题,但无论如何,这是一个很好的做法,当你需要获得总行数时使用count(*)。 – itsmeee 2011-01-29 17:42:05
为什么你在* text * -upload.com上发布你的代码?它不仅仅是文本,它是代码。此外,如果有人想帮助你,它会创建一个链接点击,并且很多人会感到懒惰。 – greg0ire 2011-01-29 17:45:39