无法使用PHP从MySQL数据库中提取所有数据

时间:2014-09-20 23:49:06

标签: php mysql sql

我有一个包含四个条目的数据库,我只是想读取数据库中的所有条目。但无论我尝试什么,第一个条目都不会出现。

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来说是全新的,并且无法找到任何相对类似的问题。

2 个答案:

答案 0 :(得分: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循环体之前执行并检查。

答案 1 :(得分:1)

认为你需要:

1)使用||相反'或'和&&而不是'和'

2)使用mysqli_fetch_assoc而不是mysqli_fetch_array

3)你需要创建自己的变量,如$ username,$ password,然后,在迭代时进行检查,如果是真的 - 为这些变量分配用户名和密码。

在迭代之后输入类似的内容:

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

代替

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

4)使用简单的调试,如:var_dump($ variable);死('调试点');

最后,调试一切。如果在迭代器之后调试行,您将看到$ row变量等于null,因此您会收到错误。 (将来:xdebug将成为您在程序调试中最好的朋友)