我正在使用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/>";
}
Run Code Online (Sandbox Code Playgroud)
这创建了永不停止的第一条记录的无限循环.我的数据库中只有两条记录,因此它应该在循环结束两个结果后停止.它再次只是保持无限循环第一条记录,永远不会移动到第二条记录然后停止.请帮助,谢谢.
你永远不会真正获取新行.您运行查询,然后访问第一行,然后一遍又一遍地引用该行.您需要在类中添加一个方法来获取行.
你需要这样的东西(未经测试的代码,基于你上面的内容):
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/>";
}
Run Code Online (Sandbox Code Playgroud)