2014-09-20 139 views
0

我有一個數據庫有四個條目,我只是試圖讀取數據庫中的所有條目。但無論我嘗試什麼,第一個入口都不會出現。無法使用PHP從MySQL數據庫提取所有數據使用PHP

輸出爲select * from userdata

 
+-----------+-----------+ 
| username | password | 
+-----------+-----------+ 
| admin  | admin  | 
| arush  | arush  | 
| root  | root  | 
| superuser | superuser | 
+-----------+-----------+ 

從我的PHP代碼的輸出:

 
arush arush 
root root 
superuser superuser 
SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY...This Completed 

PHP代碼:

$query = mysqli_query($dbc,"SELECT * FROM userdata") 
     or die(mysql_error()); 
     $row = mysqli_fetch_array($query); 
     while($row = mysqli_fetch_array($query)) 
     { 
      echo $row['username'] . " " . $row['password']; 
      echo "\n"; 
     } 
     if(!empty($row['username']) and !empty($row['password'])) 
     { 
      $_SESSION['username'] = $row['password']; 
      echo "SUCCESSFULLY LOGIN TO USER PROFILE PAGE..."; 
     } 
     else 
     { 
      echo "SORRY... YOU ENTERD WRONG ID AND PASSWORD... PLEASE RETRY..."; 
     } 

和我猜想,因爲沒有顯示的第一行或者空白!empty($row['username']) and !empty($row['password'])條件檢查也失敗。

p.s:對不起,如果它似乎是一個沒有意義的問題,是完全陌生的PHP,並沒有能夠找到任何相對類似的問題。

+1

'mysql_error()'<=那是混合btw。使用它的「我」相當於。 – 2014-09-20 23:58:24

+0

是的肯定,感謝指出:) – 2014-09-21 00:01:05

+0

這是奇怪的,你選擇在這個'SELECT * FROM userdata'中的所有行,你應該只是期待1行? – Ghost 2014-09-21 00:09:21

回答

1

您連續兩次調用$row = mysqli_fetch_array(),在打印之前覆蓋第一條記錄。這就是爲什麼「管理員」從不出現。

$row = mysqli_fetch_array($query); // this puts the admin record in $row 
    while($row = mysqli_fetch_array($query)) // this overwrites $row with the next record (root) 

,因爲它得到執行並進入while循環體之前檢查你並不需要在這個片段中的第一行。

+0

是的,工作!非常感謝。但是'!empty($ row ['username'])和!empty($ row ['password'])'條件檢查仍然失敗。 – 2014-09-20 23:54:24

1

認爲你需要到:

1)使用||而不是「或」和& &,而不是「和」

2)使用mysqli_fetch_assoc代替mysqli_fetch_array

3)你需要創建像$的用戶名,$密碼,然後獨立變量,而重複做檢查,如果這是真的 - 爲這些變量分配用戶名和密碼。

而迭代放像後:

if(strlen($row['username']) > 0 && strlen($row['password']) > 0) 

代替

if(!empty($row['username']) and !empty($row['password'])) 

4)使用簡單的調試,如:後續代碼var_dump($變量);死('調試點');

最後,調試一切。如果你在迭代器之後調試行,你會看到$ row變量等於null,所以你會得到錯誤。 (未來:xdebug將成爲你程序調試中最好的朋友)