Php 为什么这个while循环不起作用?
此while循环不执行任何回音。我测试了mysql\u num\u字段($result);它给了我16,所以不是说$i已经大于$j。这对我来说也不是无限的,只是什么都不做Php 为什么这个while循环不起作用?,php,mysql,Php,Mysql,此while循环不执行任何回音。我测试了mysql\u num\u字段($result);它给了我16,所以不是说$i已经大于$j。这对我来说也不是无限的,只是什么都不做 while ($row = mysql_fetch_array($result)) { $i = 1; $j = mysql_num_fields($result); if ($i <= $j) { echo "<li>"; echo "<
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;
}
}
while($row=mysql\u fetch\u array($result))
{
$i=1;
$j=mysql\u num\u字段($result);
if($imysql\u num\u fields
返回sql查询返回的表中的列数。它不会更改每一行。您不应该在每个循环中运行它
此外,删除$i
、$j
行并将if语句更改为if(false)
将执行与现在完全相同的操作,要解决此问题,请将if语句一起删除
您需要一个教程。来自PHP手册
返回与提取的行相对应的字符串数组,如果没有更多行,则返回FALSE。返回数组的类型取决于结果类型的定义方式。通过同时使用MYSQL\u(默认),您将获得一个包含关联索引和数字索引的数组。使用MYSQL\u ASSOC,您只会获得关联索引(正如MYSQL\u fetch\u ASSOC()所起的作用),使用MYSQL_NUM,您只会获得数字索引(正如MYSQL_fetch_row()的工作原理一样)
如果结果的两列或多列具有相同的字段名,则最后一列将优先。若要访问同名的其他列,必须使用该列的数字索引或为该列创建别名。对于别名列,不能使用原始列名访问内容
您的while将仅针对每个结果运行。您只需执行以下操作
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>";
}
while($row=mysql\u fetch\u array($result))
{
回声“”;
回声“;
回声“ ”;
}
执行此操作将仅在每个结果中循环。当结果中有一行时,请执行此操作。返回顶部,然后在仍有行可用时再次执行此操作。这是您的代码今天执行的操作:
/* 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 */
}
/*只要我可以获取数据库行*/
while($row=mysql\u fetch\u数组($result))
{
/*重置计数器i*/
$i=1;
/*计算字段的数量*/
$j=mysql\u num\u字段($result);
/*只要至少有一个字段($i始终为1)*/
if($i正如大家所说,此代码应该一起重新编写。但是为了尝试解决这个问题,您有一行16列。您希望将列表项html打印16次。您需要的是一个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>";
}
for($i=1;$i@Dagon$j
和if
语句实际上根本不需要。是的,我没有仔细阅读代码。这可能无助于回答您的问题,但您应该停止使用mysql.*
函数。它们已被弃用。请改用(从PHP 5.1开始支持)或(从PHP 4.1开始支持)。如果您不确定要使用哪一个。请删除If()
语句-它没有按照您的想法运行,您也不需要它。此外,请删除$row['card$i']
中的$i
。如果我删除了“$i”,如何在每次循环运行时选择不同的列?不要忘记删除$i
s:)谢谢Elliot B Misset thoseI我想要从我的查询中返回的列数,而不是行数。因此,这实际上是正确的。1:除非您切换查询,否则列数将始终相同,即使这样,您也会事先知道将返回多少列。2:这不正确。请阅读我所说的内容。不应在每个循环中运行列数。这是正确的应该在循环之前运行一次,如果你绝对必须对一个结果使用if语句,你知道根据定义结果将是1行或多行,那么它也应该在循环之外。此外,你在编辑中说你只返回一行16列。那你为什么要循环呢?mysql\u fetch\u array
loops rows,没有什么东西可以循环列,因为你不需要。你需要学习一些基本的编程构造,比如while
,if
和数组。我想它应该在外部。我只是用它设置一个常量来打破while循环。这并没有改变这个问题没有解决的事实。它根本没有回音hing。我想我正在寻找一个不存在的快捷方式。我想为16个不同列中的每个数字创建一组html代码。我试图避免用不同的数字键入同一代码16次。