2016-04-14 48 views
-1

我有这样的代码:PHP 7 | mysqli的查询并不只读取取一个条目

$conn = mysqli_connect($sql_servername, $sql_username, $sql_password, $sql_dbname); 

$bets = mysqli_fetch_array(mysqli_query($conn, "SELECT `id` FROM `betting` WHERE `open`=1"), MYSQLI_NUM); 

foreach($bets as $row){ 
     $bet = mysqli_query($conn, "SELECT `id` FROM `betting` WHERE `id`=$row"); 
     $hostu = $bet[0]; 
     $bet_amount = $bet[4]; 
     echo " 
     <br> 
     <div style=\"border:1px solid grey;\"> 
      <span>Bet: $bet_amount Rubies, Opponent (host): $hostu</span><p>id $row</p> 
      <button style=\"width: 10%;\" onclick=\"window.location = 'bet.php?id=" . $row ."'\">Bet</button> 
     </div> 
     "; 
    } 

此代码应该选择所有的ID,并给他们还给我一个数组,但只取一个ID。当我测试 “选择idbetting其中id = $行” 在phpMyadmin,它返回正是我想要的,但由于某种原因不在我的PHP代码。它回声一个ID,当我有4是开放= 1。

+4

你只调用了'fetch_array'一次,这就是为什么 – Ghost

+1

请正确格式化你的代码;这一切都搞砸了。 – Marcus

+1

**警告**:使用'mysqli'时,应该使用参数化查询和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)来添加用户数据到您的查询。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **绝不**将'$ _POST'数据直接放入查询中。 – tadman

回答

2

fetch_array函数将仅将第一行检索到数组中,并将向前移动行指针。你需要做的是用循环遍历行指针,直到行指针没有找到更多的行为止。

试试下面的代码:

$conn = mysqli_connect($sql_servername, $sql_username, $sql_password, $sql_dbname); 

$bets = mysqli_query($conn, "SELECT id FROM betting WHERE open=1"); 

while($row = mysqli_fetch_array($bets, MYSQL_NUM)) { 
    // Do something with your row data 
    echo $row[0]; 
} 

本质上正在发生的事情是while循环正在收集从查询结果$行的一个新实例,并向前推进该行的指针。当没有更多的行要获取--fetch_array将返回false结束循环。 -----

+0

非常感谢!拯救生命:) – UltraHex