将数组发送到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
}
谢谢*
答
同时,我解决了我自己的问题。
还有就是解决方案,如果有人需要它在未来:
(初始问题:一个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);
}
有什么问题吗?..你有没有尝试过从数据库中获取值?只有两种方式......'fetchAll'和'fetch'(最后一种适用于大范围) – FieryCat
显示用户密码 - 你在开玩笑吗?您的应用程序不应该首先存储实际的用户密码。 – CBroe
@CBroe:我创建了Users表作为测试=这是虚构的数据。我不会在我的应用程序中实际显示存储的用户和密码。我的应用程序不存储这种信息。 – Julia