PHP查询没有找到任何东西..我做错了什么?

时间:2015-04-26 21:23:19

标签: php mysql json

我一直想弄清楚这里出了什么问题。我从我的Android应用程序发送POST数据。用户名和密码。两者都编码。我的php文件通过HTTP调用接收发布数据,我已经对此进行了测试并读取了发送的数据并且它100%正确。

通过我的应用程序,我发送管理员:管理员。与脚本连接的数据库有一行填充相同的结果用户名:Admin,密码:Admin。

在我的PHP代码中,我创建了三个检查。 RowCount 1(找到一个结果)?

        if ($num_rows == 1)
    {
        $totalData["success"] = 1;
        $totalData["message"] = "Logged in successfully.";
        echo json_encode($totalData);
    }

Rowcount 0(什么也没找到)

        elseif ($num_rows == 0)
    {
        $totalData["success"] = 0;
        $totalData["message"] = "Could not find user. Please check your username and/or password.";
        echo json_encode($totalData);
    }

还有一个(永远不会被调用,因为它总是0或1个结果)。我把它放在测试目的。

        else
    {
        $totalData["success"] = 3;
        $totalData["message"] = "No data found. fix your shit.";
        echo json_encode($totalData);
    }

如果num_rows == 1,我希望得到第一部分。管理员:管理员存在,所以它应该挂钩到if语句。问题是,它没有这样做。它给了我elseif声明。它没有在我的数据库中找到具有Admin:Admin。

值的单个结果

我会在帖子中返回数据集(通过我的应用程序发送),以向您显示其有效数据。

脚本返回的JSON数据。

04-26 20:59:52.099    2984-3000/com.wachisu.insertapp V/userInserter﹕ {"message":"Could not find user. Please check your username and\/or password.","isSuccess":0,"sesUsername":"admin","sesPassword":"admin","sesDB":"user1","success":0}

我把以下脚本放在一起:

<?php

if (isset($_POST['Username']) && isset($_POST['Password']) && isset($_POST['Database']))
{
    $username = $_POST['Username'];
    $password = $_POST['Password'];
    $database = $_POST['Database'];
    $totalData = array(
        "message" => "",
        "isSuccess" => 0,
        "sesUsername" => $username,
        "sesPassword" => $password,
        "sesDB" => $database
    );
    try
    {
        $db = new PDO('mysql:host=localhost;dbname=user1', 'root', '');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $checkUsers = "SELECT
                        username, password
                    FROM
                        users
                    WHERE
                        username = :username
                    AND
                        password = :password";
        $userStmt = $db->prepare($checkUsers);
        $userStmt->execute(array(
            ':username' => $username,
            ':password' => $password
        ));
        $user = $userStmt->fetchAll();
        $num_rows = count($user);
        if ($num_rows == 1)
        {
            $totalData["success"] = 1;
            $totalData["message"] = "Logged in successfully.";
            echo json_encode($totalData);
        }
        elseif ($num_rows == 0)
        {
            $totalData["success"] = 0;
            $totalData["message"] = "Could not find user. Please check your username and/or password.";
            echo json_encode($totalData);
        }
        else
        {
            $totalData["success"] = 3;
            $totalData["message"] = "No data found. fix your shit.";
            echo json_encode($totalData);
        }
    }

    catch(PDOException $e)
    {
        $message = $e->getMessage();
    }

    $db = NULL;
}

我一直在尝试发送用户名:admin,密码:admin。

我的数据库如下所示:

Database screenshot

我只知道我忽略了一些东西,一些小事。我的大脑有些放弃了。

2 个答案:

答案 0 :(得分:0)

我在您的帖子中看到的您并不关心数据。

但这可能是数据问题。

所以你写了用户名:管理员,密码:管理员

您已在数据库中以用户名:admin,密码:admin 向我们提供屏幕截图。

你发帖时真的检查过好的数据吗?

它应该是小写:adminadmin

编辑1

从phpMyAdmin查看新屏幕截图,我对您的列名password有另一种猜测。似乎MySQL将密码识别为关键字,而不是列名。要解决此问题,您应该使用该字段名称周围的反引号:

SELECT * 
FROM users 
WHERE
  username = 'admin'
  AND
  `password` = 'admin'

答案 1 :(得分:0)

信不信由你,我的数据库就是问题所在。没有什么可以选择。我创建了一个具有完全相同值的新数据库,并且DID可以工作。感谢所有试图提供帮助的人!

Database