MySQL Query в цикле foreach не возвращает результаты при заполнении массива более чем 1 элементом - PullRequest
0 голосов
/ 29 января 2011

Как видно из заголовка, я не могу получить результаты ни по одному из запросов, если у меня в массиве более 1 элемента.

Загруженный код здесь: http://www.text -upload.com / read.php? ID = 44739 & с = 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 каждый цикл.

Ответы [ 2 ]

1 голос
/ 29 января 2011

Код, который вы разместили, немного расточителен с точки зрения ресурсов, вы должны попробовать что-то вроде следующего:

<?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>";
    }
0 голосов
/ 08 июля 2011

Я лично помню, что num_rows был ненадежным, но я не помню, почему.

Справочная страница mysql (http://dev.mysql.com/doc/refman/5.0/en/mysql-num-rows.html) предлагает одну из возможных причин, по которой вы получаете счет 0:

Если вы используете mysql_use_result (), mysql_num_rows () не возвращает правильное значение, пока не будут получены все строки в наборе результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...