【问题标题】:Sending Array to PHP Web service and Returning Array from MySQL Database将数组发送到 PHP Web 服务并从 MySQL 数据库返回数组
【发布时间】:2017-06-14 12:24:35
【问题描述】:

我正在用 MySQL 作为后端数据库在 AngularJS 中开发一个应用程序。 Web 服务使用 PHP 5.6.30。

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

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

MySQL 数据库中User 表的结构:

  • idUser (int)
  • 用户名(varchar)
  • 密码(varchar)

发送到 Web 服务的数据结构 itemsArray(数组)示例:

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

用于显示 Web 服务返回的数据的 HTML 示例:

<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
  }

谢谢你*

【问题讨论】:

  • 问题是什么?.. 你有没有尝试过从数据库中获取值?只有两种方式...fetchAllfetch(最后一种是大范围的最佳选择)
  • 显示用户密码 - 你在开玩笑吗?您的应用程序甚至不应该首先存储实际用户密码。
  • @CBroe:我创建了 Users 表作为测试 = 这是虚构的数据。我实际上不会在我的应用程序中显示存储的用户和密码。我的应用不存储此类信息。
  • @FieryCat:我问是因为我不知道如何解决我的问题。我最近开始编程,我不知道如何正确操作数组。
  • @Julia,可能的话,你可以详细解释你的问题是什么......(如果你没有从服务器上拿任何东西,那么启用错误绘图,检查日志,......以识别原始问题)

标签: javascript php mysql angularjs arrays


【解决方案1】:

你不应该只需要:

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

代替:

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

【讨论】:

  • 可以是框架逻辑的一部分……应该不是这样
【解决方案2】:

可能是这样的:

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); 
}

【讨论】:

    【解决方案3】:

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

    如果以后有人需要,有解决办法:

    (最初的问题:将 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
      }
    

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 2014-10-17
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多