2017-03-18 50 views
0

无法使用while循环显示mysql_fetch_array的所有行。如何使用while循环显示mysql_fetch_array的所有行

嗨。我的问题是我只能显示输入数据库表的最后一行。 我用php解析表单数据以插入到数据库表中。 我知道表格数据被插入到表格中。 我正在使用while循环尝试从表格的所有行中的两列提取数据。 我使用php来显示每列中的两列id & product_name的数据。 这是我的理解,一个mysql_fetch_array将只返回1行,除非它与一个while循环一起使用,然后应该返回所有行。所以我很困惑,为什么我只能摆出最后一行。

当我浏览phpMyAdmin中的表格时,有三行各有一个ID号码。 它们按顺序1,2,3顺序排列,因为id列是自动递增的。 id列是主键。 product_name列是唯一键。

我不认为我的查询结构有问题。 可能是一个定义$ product_list变量的问题?我不知道。

我已关闭浏览器并清除所有历史记录,cookies等。 我已停止&重新启动Apache服务器& mysql。

当我echo var_dump($ sql);我得到:类型(mysql结果)的资源(6)。 当我回声var_dump($ product_list);我得到:string(99)“3 - Blue Jeans编辑•删除” 当我print_r($ sqL);我得到:资源ID#6 当我echo $ product_list;我得到:3 - 蓝色牛仔裤编辑•删除

我花了很多时间通过谷歌搜索寻找答案,但没有一个似乎适合这个特定的问题。

我确实看到一个类似的问题,建议使用串联方法,但有零(0)票。所以我不确定这是否是对我的问题可行的补救措施。

这里是我使用的代码:

<?php 
    //this block grabs the whole list for viewing 
    $product_list = ""; 
    $sql= mysql_query ("SELECT * FROM `products`"); 
    $product_count = mysql_num_rows ($sql); 
    if ($product_count > 0) { 
     while($row = mysql_fetch_array ($sql)) { 
      $id = $row['id']; 
      $product_name = $row ['product_name']; 
      $product_list = "$id - $product_name &nbsp; &nbsp; &nbsp; <a    
      href='#'>edit</a> &nbsp; &bull; <a href='#'>delete</a> 
      <br/>"; 

     } 
    } else { 
     $product_list = "You have no products listed in your store yet"; 
    } 
    ?> 

    <?php echo $product_list; ?> 
+1

不要再使用'mysql_ *'函数了。他们折旧。 –

回答

1

您将要覆盖$所属类别中的每一个循环。

你必须毗连运算符来concateate .=

$product_list .= "$id - $product_name &nbsp; &nbsp; &nbsp; <a href='#'>edit</a> &nbsp; &bull; <a href='#'>delete</a> <br/>";

+0

根据您的建议,我在$ product_list后加了点,现在我有一条错误消息.Parse错误:语法错误,在第58行的C:\ xampp \ htdocs \ tutorials \ kensStore \ store_admin \ inventory_list.php中出现意外的'=' – Learn2Earn

+0

谁能告诉我为什么concant =不起作用? – Learn2Earn

+0

concant operator在这种情况下工作。我犯了一个愚蠢的错误。我在点符号和等号之间有一个空格。看起来像“。=”而不是“。=”更正concant操作符解决了我的问题。谢谢Jakub A. – Learn2Earn

0

好这个答案可能不是你要找什么,但我只用库MySQLi没有旧版本。我只会用更新的语法重写你的代码,因为我知道这会起作用。所以这里去

<?php 
 
    $conn = new mysqli($server, $username, $password, $database); 
 
    $product_list = ""; 
 
    $sql = $conn->query("SELECT * FROM products"); 
 
    $product_count = mysqli_num_rows ($sql); 
 
    if ($product_count > 0) { 
 
     while($row = $sql->fetch_assoc()) { 
 
      $id = $row['id']; 
 
      $product_name = $row ['product_name']; 
 
      $product_list = "$id - $product_name &nbsp; &nbsp; &nbsp; <a    
 
      href='#'>edit</a> &nbsp; &bull; <a href='#'>delete</a> 
 
      <br/>"; 
 

 
     } 
 
    } else { 
 
     $product_list = "You have no products listed in your store yet"; 
 
    } 
 
    ?>

您将需要无论是在mysqli的面向对象方法中添加$conn = new mysqli($server, $username, $password, $database);或可以在$sql = $conn->query("SELECT * FROM products");线替换$conn枝条现有之一,这应该工作。

+0

Praveen M感谢您的答复,我的答案产生了与以前相同的结果。 – Learn2Earn