2014-03-02 224 views
0

我正在使用php while循环来读取结果,但它只是在第一条记录上连续循环,并且从不移动到第二条记录并且从不停止。我的代码:PHP while循环 - 不停止

class MySqlDatabase { 

    public function __construct() { 
     $this->Open_Connection(); 
    } 

    //Vars for Function Open_Connection 
    private $_Connection; 
    //Function Open_Connection - Connects to DB 
    public function Open_Connection(){ 
     $this->_Connection = mysqli_connect('localhost','xxx','xxx','xxx'); 
     if(!$this->_Connection){ 
      die("Connection Failed: ". mysqli_error($this->_Connection)); 
     } else { 
      echo "Success"; 
     } 
    } 

    //Vars for Function Query 
    public $Results_Row; 
    //Function Query - Runs Query and returns results 
    public function Query($Sql){ 
     $Results = mysqli_query($this->_Connection, $Sql); 
     if(!$Results){ 
      die("Query Failed: ". mysqli_error($Results). "<br/>".$Sql); 
     } 
     $this->Results_Row = mysqli_fetch_row($Results); 

     return $Results; 
    } 

} 

$Db = new MySqlDatabase; 

$Db->Query("SELECT * FROM Users"); 

while ($R = $Db->Results_Row){ 
    var_dump($R); 
    echo "<hr/>"; 
} 

这是创造永不停歇的第一条记录的无限循环。在我的数据库中只有两条记录,所以它应该在循环两个结果后停止。再次,它只是保持无限循环的第一个记录,永远不会移动到第二个记录,然后停止。请帮助,谢谢。

+0

为什么你使用** = **而不是** == **在你的while循环中 – user1767754

回答

6

你永远不会实际获取新行。您运行查询,然后访问第一行,然后只是反复引用该行。你需要向你的类添加一个方法来获取一行。

你需要的东西像这样(未测试的代码,根据你所拥有以上):

class MySqlDatabase { 

    public function __construct() { 
     $this->Open_Connection(); 
    } 

    //Vars for Function Open_Connection 
    private $_Connection; 
    //Function Open_Connection - Connects to DB 
    public function Open_Connection(){ 
     $this->_Connection = mysqli_connect('localhost','xxx','xxx','xxx'); 
     if(!$this->_Connection){ 
      die("Connection Failed: ". mysqli_error($this->_Connection)); 
     } else { 
      echo "Success"; 
     } 
    } 

    public function FetchRow() { // I added this 
     $this->Results_Row = mysqli_fetch_row($Results); 
    } 

    //Vars for Function Query 
    public $Results_Row; 
    //Function Query - Runs Query and returns results 
    public function Query($Sql){ 
     $Results = mysqli_query($this->_Connection, $Sql); 
     if(!$Results){ 
      die("Query Failed: ". mysqli_error($Results). "<br/>".$Sql); 
     } 
     // I removed the mysqli_fetch_row() here to method FetchRow() 

     return $Results; 
    } 

} 

$Db = new MySqlDatabase; 

$Db->Query("SELECT * FROM Users"); 

while ($R = $Db->FetchRow()){ // I changed this 
    var_dump($R); 
    echo "<hr/>"; 
} 
+0

你介意给我一个例子还是加入我的代码?我非常新,理解你在说什么,但不知道如何实施。谢谢。 – user982853

+0

http://at1.php.net/mysql_fetch_row – user1767754

+0

@ user982853我在上面添加了一个粗略的例子。类似的东西应该适合你。 –

1

php.netmysql_fetch_row(我的重点):

返回对应的数值数组取出的行并将内部数据指针向前移动

您当前的代码所做的只是将第一行保存到$DB->Results_Row,并在while循环中继续将该行分配给$R

预期的用法是重复调用mysql_fetch_row,用返回值做一些事情,并在返回FALSE时退出循环。你可以做的是

  1. 保存$Results作为一个实例变量,创建该变量调用mysql_fetch_row另一种方法,并呼吁从while条件表达式;或
  2. 只需从Query方法中返回$Results并在while条件表达式中调用mysql_fetch_row即可。