Php webservice循环

时间:2017-08-05 17:15:44

标签: php android web-services

我即将失去理智。我没有任何PHP经验,我正在努力学习php网络服务。

这是我的代码;

<?php

    private $username2 = "";
    private $password2 = "";

    private $DB_CONNECTION;
    private $servername = "localhost";
    private $username = "root";
    private $password = "";
    private $dbname = "dptest";

    function __construct()
    {
        $this->DB_CONNECTION = mysqli_connect($this->servername, $this->username,
            $this->password, $this->dbname);
    }
function getUserType(){
        $sql = "SELECT usertype FROM `login_test` WHERE username = '". $this->username2."'AND password = '".$this->password2."'";

        $result = mysqli_query($this->DB_CONNECTION,$sql);
        //$value = mysqli_fetch_array($result);
        while(!is_null($value = mysqli_fetch_array($result))){
            return $value['usertype'];
        }


    }

}

这是我的功能代码。另一个是我的登录代码;

<?php

include_once 'Authentication.php';
use user\Authentication;

$auth = new Authentication();
$auth->prepare($_POST);
$userStatus = $auth->isUserValidToLogIn();


if ($userStatus) {
    // user existed
    // So log him to main page
    $json['success'] = 1;
    $json['message'] = 'access granted';
    $json['usertype'] = $auth->getUserType();


    echo json_encode($json);
} else {

    $json['success'] = 0;
    $json['message'] = 'error!';


    echo json_encode($json);
}

我正在尝试获取用户的类型,但是当尝试从phpmyadmin本地数据库获取数据时,它只提供第一列的usertype。当我尝试获得第2,第3,第4等时..用户的usertype它不返回任何内容,空白页面显示在邮递员应用程序上。

我的数据库也是这样的;

usertype username password
admin     despro    1234
client     test     1234
client    despro2   1234
client    despro3   1234

1 个答案:

答案 0 :(得分:0)

您只返回一列的原因是您只请求一列。为了获得您想要的列,您需要在查询中显式请求它们,或使用“*”来获取所有列。因此,您的查询应如下所示,以便从数据表中获取所有列:

$sql = "SELECT * FROM `login_test` WHERE username = '". $this->username2."'AND password = '".$this->password2."'";

一般情况下,我强烈建议您停止使用MySQLi扩展并开始使用PHP数据对象(PDO)。它使得使用预准备语句变得容易。这也使您的代码更安全。

然后你的查询看起来像这样(这不是完整的代码):

// connecting to db
$pdo = new PDO($dsn, $user, $pass, $opt);
    $sql = 'SELECT * 
            FROM login_test 
            WHERE userName = :username
            AND pass = :password;';

    $stmt = $pdo->prepare($sql);

    $stmt->bindParam(':username', $username2, PDO::PARAM_STR);
    $stmt->bindParam(':password', $password2, PDO::PARAM_STR);

    $res = $stmt->execute();

    if ($res) {
        $response["userdata"] = array();
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
            $myData = array();
            $myData["usertype"] = $row["usertype"];
            $myData["username"] = $row["username"];

            array_push($response["userdata"], $myData);
        }
    }

请注意,上面的代码用于返回多行数据。如果您只想要一行,那么请使用以下内容:

if ($res) {
    $response["userdata"] = array();
    $myData = array();
    $myData["usertype"] = $row["usertype"];
    $myData["username"] = $row["username"];

    array_push($response["userdata"], $myData);
}

删除'while'语句。

您最近可能想看看我给出的答案。这是使用Android应用程序中的Web服务的综合示例。

How to insert all the SQL table data into an array in java [android studio]