PHP If语句问题

时间:2009-06-18 09:27:15

标签: php

对于下面的代码,我试图使用IF语句

  

如果(mysql_num_rows($ RESA)大于0)

如果$ entry不在我数据库中任何表的“site”列中,则避免运行foreach循环。但是,如果我的数据库中的任何表中的“site”列中不存在$ entry,则会收到错误消息“警告:为foreach()提供的参数无效”。知道为什么这样做吗?

提前致谢,

约翰

$result = mysql_query("SHOW TABLES FROM feather") 
or die(mysql_error()); 

while(list($table)= mysql_fetch_row($result))
{
  $sqlA = "SELECT COUNT(*) FROM `$table` WHERE `site` LIKE '$entry'";

  $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
  list($isThere) = mysql_fetch_row($resA);
  $isThere = intval($isThere);
  if ($isThere)
  {
     $table_list[] = $table;
  }

}

if(mysql_num_rows($resA)>0){
foreach ($table_list as $table) { 
    $sql = "SELECT votes_up FROM `$table` WHERE `site` LIKE '$entry'"; 
    $sql1 = mysql_query($sql) or die("$sql:".mysql_error());
   while ($row = mysql_fetch_assoc($sql1)) {
       $votes[$table] = $row['votes_up'];
       $sum += $row['votes_up'];
   } 

}
}
else{
print "";
}

2 个答案:

答案 0 :(得分:7)

初始化变量是个好主意:

$table_list = array(); // <-- Initialize variable.
while (list($table) = mysql_fetch_row($result)) {
    /* ... */
    $table_list[] = $table;
    /* ... */
}

if (mysql_num_rows($resA) > 0) {
    foreach ($table_list as $table) { 
        /* ... */
    }
}

您收到错误是因为$table_list没有添加任何条目,这意味着当您运行foreach循环时该变量将不存在。首先对其进行初始化以避免这种混淆。

没有条目添加到$table_list的原因是因为所有提取的表的计数为零。

答案 1 :(得分:0)

初始化变量很好,但是在进入foreach循环之前你也可以检查一个数组:

if (is_array($table_list))
foreach ($table_list as $table) {
  ...
}

在任何可以传递非数组的foreach循环之前检查它是明智的。 PHP在foreach中需要一个数组是严格的(虽然它在很多其他地方相当松弛)。我一直认为将其他任何东西(例如字符串)视为空数组会更好,因此根本不会循环。