对于下面的代码,我试图使用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 "";
}
答案 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中需要一个数组是严格的(虽然它在很多其他地方相当松弛)。我一直认为将其他任何东西(例如字符串)视为空数组会更好,因此根本不会循环。