PHP slimframework GET 请求没有 return 任何东西
PHP slimframework GET request doesn't return anything
所以我使用 PHP slimframework (https://www.slimframework.com/) 只是为了一个简单的 API 我需要在我的 React 应用程序中使用,但我无法让我的查询使用这些参数,因为 $start_date 和 $end_date 没有从 GET 请求返回任何东西。这个 MySQL 查询正常工作,我已经用 startDate 和 endDate 测试了它,我从我的 React 应用程序返回,问题是我无法弄清楚如何从这些 GET 请求中将数据返回到我的 $start_date 和 $end_date 变量。
这是我的后端 (slimframework) 的样子:
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app = new \Slim\App;
$app->get('/api/date', function(Request $request, Response $response){
$start_date=date('Y-m-d H:i:s', $_GET['startDate']);
$end_date=date('Y-m-d H:i:s', $_GET['endDate']);
// $start_date = $app->request()->params('startDate');
// $end_date = $app->request()->params('endDate');
// $start_date = $request->getAttribute['startDate'];
// $end_date = $request->getAttribute('endDate');
$sql = "SELECT * FROM `datescalendar` where `date` BETWEEN '{$start_date}' AND '{$end_date}'";
// $sql = "SELECT * FROM `datescalendar` where `date` BETWEEN '1525679047' AND '1526283847'";
try{
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->query($sql);
$dates = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
// return $response->withJson($dates);
echo json_encode($dates);
} catch(PDOException $e){
echo '{"error": {"text": '.$e->getMessage().'}';
}
});
这是我在 React 应用中从 API 获取数据的方式:
fetchNewDatesNext() {
const startDate = this.state.startDate.unix();
const endDate = this.state.startDate.add(1, 'week').unix();
axios.get(`http://localhost/api/date?startDate=${startDate}&endDate=${endDate}`).then((response) => {
this.setState(() => ({ data: response.data}));
});
};
当我一次从数据库中查询所有内容时,应用程序正常工作 ($sql = "SELECT * FROM datescalendar
)
有什么想法吗?
尝试使用 \Request
slim class 获取参数,例如:$paramValue = $app->request()->params('paramName');
.
您可以在 Here、Slim v2 文档
中阅读更多相关信息
$app->get('/api/somewhere', function( $request, $response){
//Calling ..../api/somewhere?stuff=bob
// var_dump($_GET['stuff']); // <= Bad way
//=> string(3) "bob"
//var_dump($request->getAttribute['stuff']);
//=> Notice: Undefined property: Slim\Http\Request::$getAttribute
//var_dump($request->getParam('stuff'));
//=> string(3) "bob"
var_dump($request->getParams());
//=> array(1) { ["stuff"]=> string(3) "bob" }
});
我认为你的请求是空的
$startDate = $request->getQueryParam('startDate');
$endDate = $request->getQueryParam('endDate');
还要注意那个查询,它很容易受到 SQL 注入。您必须使用准备好的语句。参见 https://phpdelusions.net/pdo#prepared
我刚刚发现问题出在我的 React 应用端逻辑如何更改这些参数。我得到了有效的参数,但不是正确的一周。因为我当时只从 API 获取 1 周的数据,所以我没有在正确的一周取回数据。还是谢谢你的帮助!
此外,对我来说获取查询参数的正确方法是:
$startDate = $request->getQueryParam(‘startDate’);
$endDate = $request->getQueryParam(‘endDate’);
所以我使用 PHP slimframework (https://www.slimframework.com/) 只是为了一个简单的 API 我需要在我的 React 应用程序中使用,但我无法让我的查询使用这些参数,因为 $start_date 和 $end_date 没有从 GET 请求返回任何东西。这个 MySQL 查询正常工作,我已经用 startDate 和 endDate 测试了它,我从我的 React 应用程序返回,问题是我无法弄清楚如何从这些 GET 请求中将数据返回到我的 $start_date 和 $end_date 变量。
这是我的后端 (slimframework) 的样子:
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app = new \Slim\App;
$app->get('/api/date', function(Request $request, Response $response){
$start_date=date('Y-m-d H:i:s', $_GET['startDate']);
$end_date=date('Y-m-d H:i:s', $_GET['endDate']);
// $start_date = $app->request()->params('startDate');
// $end_date = $app->request()->params('endDate');
// $start_date = $request->getAttribute['startDate'];
// $end_date = $request->getAttribute('endDate');
$sql = "SELECT * FROM `datescalendar` where `date` BETWEEN '{$start_date}' AND '{$end_date}'";
// $sql = "SELECT * FROM `datescalendar` where `date` BETWEEN '1525679047' AND '1526283847'";
try{
// Get DB Object
$db = new db();
// Connect
$db = $db->connect();
$stmt = $db->query($sql);
$dates = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
// return $response->withJson($dates);
echo json_encode($dates);
} catch(PDOException $e){
echo '{"error": {"text": '.$e->getMessage().'}';
}
});
这是我在 React 应用中从 API 获取数据的方式:
fetchNewDatesNext() {
const startDate = this.state.startDate.unix();
const endDate = this.state.startDate.add(1, 'week').unix();
axios.get(`http://localhost/api/date?startDate=${startDate}&endDate=${endDate}`).then((response) => {
this.setState(() => ({ data: response.data}));
});
};
当我一次从数据库中查询所有内容时,应用程序正常工作 ($sql = "SELECT * FROM datescalendar
)
有什么想法吗?
尝试使用 \Request
slim class 获取参数,例如:$paramValue = $app->request()->params('paramName');
.
您可以在 Here、Slim v2 文档
中阅读更多相关信息$app->get('/api/somewhere', function( $request, $response){
//Calling ..../api/somewhere?stuff=bob
// var_dump($_GET['stuff']); // <= Bad way
//=> string(3) "bob"
//var_dump($request->getAttribute['stuff']);
//=> Notice: Undefined property: Slim\Http\Request::$getAttribute
//var_dump($request->getParam('stuff'));
//=> string(3) "bob"
var_dump($request->getParams());
//=> array(1) { ["stuff"]=> string(3) "bob" }
});
我认为你的请求是空的
$startDate = $request->getQueryParam('startDate');
$endDate = $request->getQueryParam('endDate');
还要注意那个查询,它很容易受到 SQL 注入。您必须使用准备好的语句。参见 https://phpdelusions.net/pdo#prepared
我刚刚发现问题出在我的 React 应用端逻辑如何更改这些参数。我得到了有效的参数,但不是正确的一周。因为我当时只从 API 获取 1 周的数据,所以我没有在正确的一周取回数据。还是谢谢你的帮助!
此外,对我来说获取查询参数的正确方法是:
$startDate = $request->getQueryParam(‘startDate’);
$endDate = $request->getQueryParam(‘endDate’);