将数组发送到PHP Web服务并从MySQL数据库返回数组

问题描述:

我正在用MySQL作为后端数据库在AngularJS中开发一个应用程序。 Web服务使用PHP 5.6.30。将数组发送到PHP Web服务并从MySQL数据库返回数组

我想知道什么是从我的MySQL数据库的表User检索通过itemsArray阵列发送到Web服务的每个用户名的信息列表的最佳方式:

  • itemsArray数组与用户名列表一起发送;
  • returnedArray数组是从Web服务返回的信息列表。对于每个用户名,idUser,用户名和密码被返回以显示在HTML页面中。

从MySQL数据库的User表的结构:

  • ID用户(INT)
  • 用户名(为varchar)
  • 密码(VARCHAR)

样品的数据结构itemsArray(Array)tha t被发送到Web服务:

var itemsArray = ["admin1", "admin2", "admin3", "admin4", "admin5"]; 

样品的HTML来显示由Web服务返回的数据的:

<ul><li ng-repeat="item in returnedArray track by $index">{{ item }}</li></ul> 

样品控制器:

angular.module('myApp').controller('Ctrl1', ['$scope', 'services', Ctrl1]); 

function Ctrl1($scope, services) { 
    var itemsArray = ["admin1", "admin2", "admin3", "admin4", "admin5"]; 
    //request to MySQL BD 
    services.getInfo(itemsArray).then(function(data){ 
     $scope.returnedArray = data.data; 
    }); 
    } 

样品的app.js发送请求到Web服务:

.factory('services', ['$http', function($http){ 
    var serviceBase = 'services/'; 
    var obj = {}; 
    obj.getInfo = function (arrayItems) { 
    return $http.get(serviceBase + 'get_info?arrayItems=' + arrayItems); 
    }; 
    // return obj 
    return obj; 
}]); 

样品在PHP Web服务的:(必须填写)

// GET - Get Info 
    private function get_info(){ 
    if($this->get_request_method() != "GET"){ 
     $this->response('', 406); 
    } 
    $arrayItems = (array)$this->_request['arrayItems']; 
    $query = "TO COMPLETE"; 
    $r = $this->mysqli->query($query) or die($this->mysqli->error.__LINE__); 
    if($r->num_rows > 0){ 
     $result = array(); 
     while($row = $r->fetch_assoc()){ 
     $result[] = $row; 
     } 
     $this->response($this->json($result), 200); // send user details 
    } 
    $this->response('', 204); // send user detail 
    } 

谢谢*

+0

有什么问题吗?..你有没有尝试过从数据库中获取值?只有两种方式......'fetchAll'和'fetch'(最后一种适用于大范围) – FieryCat

+0

显示用户密码 - 你在开玩笑吗?您的应用程序不应该首先存储实际的用户密码。 – CBroe

+0

@CBroe:我创建了Users表作为测试=这是虚构的数据。我不会在我的应用程序中实际显示存储的用户和密码。我的应用程序不存储这种信息。 – Julia

同时,我解决了我自己的问题。

还有就是解决方案,如果有人需要它在未来:

(初始问题:一个JavaScript字符串数组转换为PHP字符串数组)

解决方案:

private function get_info(){ 
    if($this->get_request_method() != "GET"){ 
     $this->response('', 406); 
    } 
    $arrayItems = $this->_request['arrayItems']; 

    //Explode on comma 
    $vals = explode(',', $arrayItems); 
    //Trim whitespace 
    foreach($vals as $key => $val) { 
     $vals[$key] = trim($val); 
    } 
    //Return empty array if no items found 
    //http://php.net/manual/en/function.explode.php#114273 
    $arrayItems_php = array_diff($vals, array("")); 

    $usernames = implode("','", $arrayItems_php); 
    $query = "SELECT idUser, Username, Password FROM User 
    WHERE Username IN ('$usernames')"; 
    $r = $this->mysqli->query($query) or die($this->mysqli->error.__LINE__); 


    if($r->num_rows > 0){ 
     $result = array(); 
     while($row = $r->fetch_assoc()){ 
     $result[] = $row; 
     } 
     $this->response($this->json($result), 200); // send user details 
    } 
    $this->response('', 204); // send user detail 
    } 

你不应该只需要:

$this->response(json_encode($result), 200); 

代替:

$this->response($this->json($result), 200); 
+0

它可以是框架逻辑的一部分......不应该是这样 – FieryCat

它可能是某人hing那样:

private function get_info() 
{ 
    if ($this->get_request_method() != 'GET') { 
     $this->response('', 406); 
    } 
    $arrayItems = (array) $this->_request['arrayItems']; 
    $query = 'SELECT * FROM `table` WHERE `field` = :key'; 
    $r = $this->mysqli->prepare($query); 
    // as an example 
    $this->mysqli->bind_param('key', current($arrayItems)); 
    $this->mysqli->execute(); 

    $result = array(); 
    $responseCode = 204; 
    while ($row = $r->fetch_assoc()) { 
     $responseCode = 200; 
     $result[] = $row; 
    } 
    // send user details 
    $this->response($this->json($result), $responseCode); 
}