这个while循环没有执行任何回声。我测试了mysql_num_fields($ result);它给了我16,所以不是$ i已经大于$ j。对我来说也不会无限,只是无所事事。
while ($row = mysql_fetch_array($result))
{
$i = 1;
$j = mysql_num_fields($result);
if ($i <= $j) {
echo "<li>";
echo "<a id='autoload' href='images/big/".$row['card$i'].".jpg' class='highslide' onclick='return hs.expand(this, config1 )'>";
echo "<img src='images/small/".$row['card$i']."jpg' alt''";
echo " title='";
echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
echo "</a>";
echo "</li>";
$i++;
}
else {
break;
}
}
我想我应该说这个查询只返回1行。然后,我需要从几个不同的列(card1,card2,card3 ... card16)中提取一个数字,并将其作为图像文件名,如上所示。此外,我了解所有的mysqli和注射内容的保护,我真的不需要担心这种项目。
答案 0 :(得分:1)
mysql_num_fields
返回sql查询返回的表中的列数。它不会改变每一行。你不应该每次循环运行它。
此外,删除$i
,$j
行并将if语句更改为if(false)
将完成与现在相同的操作,并解决此问题,您删除if完全声明......
您需要php & mysql教程。
答案 1 :(得分:1)
FROM PHP MANUAL
返回与获取的行对应的字符串数组,如果没有其他行,则返回FALSE。返回数组的类型取决于result_type的定义方式。通过使用MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。使用MYSQL_ASSOC,你只获得关联索引(如mysql_fetch_assoc()工作),使用MYSQL_NUM,你只获得数字索引(因为mysql_fetch_row()工作)。
如果结果的两列或多列具有相同的字段名称,则最后一列将优先。要访问同名的其他列,必须使用列的数字索引或为列创建别名。对于别名列,您无法使用原始列名访问内容。
你的时间只会针对每个结果运行。你应该只需要做
while ($row = mysql_fetch_array($result))
{
echo "<li>";
echo "<a id='autoload' href='images/big/".$row['card'].".jpg' class='highslide' onclick='return hs.expand(this, config1 )'>";
echo "<img src='images/small/".$row['card']."jpg' alt''";
echo " title='";
echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
echo "</a>";
echo "</li>";
}
这样做只会循环显示每个结果。虽然结果中有一行,但请执行此操作。如果仍有行可用,则返回顶部然后再次执行
答案 2 :(得分:0)
这就是您的代码今天所做的事情:
/* as long as i can fetch a database row */
while($row=mysql_fetch_array($result))
{
/* reset the counter i */
$i=1;
/* count the number of fields */
$j=mysql_num_fields($result);
/* as long as its at leas one field ($i is always 1) */
if ($i <= $j)
{
/* print some html */
echo "<li>";
echo "<a id='autoload' href='images/big/".$row['card$i'].".jpg' class='highslide' onclick='return hs.expand(this, config1 )'>";
echo "<img src='images/small/".$row['card$i']."jpg' alt''";
echo " title='";
echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
echo "</a>";
echo "</li>";
/* increase counter to 2 (always gets to 2 as i always is 1 before) */
$i++;
}
/* if there was zero field */
else
{
/* break the loop */
break;
}
/* loop by jumping ut to reset counter i */
}
答案 3 :(得分:0)
就像所有人都说的那样,这段代码应该一起重做。但是要尝试找出问题,你有一行有16列。您想打印出16次列表项html。你想要的是for循环。 if循环只运行一次。
for($i=1; $i <= $j; $i++) {
/* print some html */
echo "<li>";
echo "<a id='autoload' href='images/big/".$row['card$i'].".jpg' class='highslide' onclick='return hs.expand(this, config1 )'>";
echo "<img src='images/small/".$row['card$i']."jpg' alt''";
echo " title='";
echo $year." ". $brand." ".$playerfirst." ".$playerlast." ".$details."'/>";
echo "</a>";
echo "</li>";
}