Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么这个while循环不起作用?_Php_Mysql - Fatal编程技术网

Php 为什么这个while循环不起作用?

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循环不执行任何回音。我测试了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 "<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($i
mysql\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次。