【问题标题】:Php webservice loopingphp web服务循环
【发布时间】:2017-08-05 17:15:44
【问题描述】:

我快疯了。我没有任何 php 经验,我正在为 php web 服务而苦苦挣扎。

这是我的代码;

<?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 本地数据库中获取数据时,它只给出第一列的用户类型。当我尝试获取第 2、3、4 等时.. 用户的用户类型它不返回任何内容并且在邮递员应用程序上显示空白页面。

我的数据库也是这样的;

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

【问题讨论】:

  • 我不明白你的问题。您声明您尝试从“phpmyadmin”获取数据,这是访问数据库的工具。它与您的代码无关。
  • 我引用它是因为现在项目后面没有正在运行的服务器。我的问题是每当我尝试从数据库(登录的用户)获取用户类型信息时,我只能获取第一列。我无法获取另一列的数据。我认为问题出在我在函数中构建的循环中,但我无法修复它。
  • 您想要所有列“用户类型”、“用户名”和“密码”?
  • 问题已解决。感谢您抽空Barns52

标签: php android web-services


【解决方案1】:

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

$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 应用程序中的网络服务的综合示例。

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

【讨论】:

  • 感谢您宝贵的时间。您无法猜测这个答案对我有多大帮助。谢谢您的朋友。
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多