我有一个非常简单的表,其中包含“受害者”列表以及该类型的相应数量。我正在尝试使用以下代码创建此信息的输出页面:
foreach( $victims as $vic )
{
$hits = mysql_query("SELECT amount
FROM victims
WHERE victim = ".$vic );
echo $hits;
print "$vic: $hits <br /><hr>";
}
然而,hits
是空的。我的SQL查询出了什么问题?
答案 0 :(得分:1)
foreach($victims as $vic)
{
$hits = mysql_query('SELECT amount
FROM victims
WHERE victim = "' . mysql_real_escape_string($vic) . '"');
if($hits && mysql_num_rows($hits)>0) {
while($row = mysql_fetch_array($hits)) {
echo '<p>' . $row['amount'] . ' hits</p>';
}
} else {
echo '<p>' . mysql_error() . '</p>';
}
}
答案 1 :(得分:0)
mysql_query()
不会返回查询的实际结果,而是返回resource
,然后您可以使用该结果访问结果。
这是一种典型的模式:
$result = mysql_query(...);
$row = mysql_fetch_assoc($result);
print($row['amount']);
每次调用mysql_fetch_assoc
都会返回结果集的下一行。如果您希望返回多行,可以在while循环中调用它:
$result = mysql_query(...);
while ($row = mysql_fetch_assoc($result)) {
print($row['amount']);
}
答案 2 :(得分:0)
由于在任何答案中都没有明智的错误检查,我会将整个事情放在这里:
foreach( $victims as $vic )
{
$sql = "SELECT amount
FROM victims
WHERE victim = '".mysql_real_escape_string($vic)."'";
$result = mysql_query($sql);
$result or die('Query Error: '.mysql_error() . ' - ' . $sql);
$hitsarray = mysql_fetch_assoc($result);
if ($hitsarray) {
$hits = $hitsarray['amount'];
} else {
// No row was found
$hits = 0;
}
echo $hits;
print "$vic: $hits <br /><hr>";
}
哦,这解决了导致问题的查询错误。请注意在字符串中包含$vic
变量的引号,以及字符串的正确转义...