PHP slimframework GET请求不返回任何内容

时间:2018-05-07 18:27:35

标签: php mysql reactjs get slim

所以我使用PHP slimframework(https://www.slimframework.com/)只是我需要在我的React应用程序中使用的一个简单API,我无法使用这些参数来查询,因为$ 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

一次查询所有内容时,应用程序正常运行

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

我认为您的请求只是空的

答案 1 :(得分:0)

$startDate = $request->getQueryParam('startDate');
$endDate = $request->getQueryParam('endDate');

同时注意该查询,它易受SQL注入攻击。您必须使用预准备的陈述。见https://phpdelusions.net/pdo#prepared

答案 2 :(得分:0)

我刚刚发现问题在于我的React应用程序端逻辑如何更改这些参数。我正在找回有效的参数,但不是正确的一周。由于我当时只从API获取1周的数据,因此我没有获得正确的一周的数据。无论如何,谢谢你的帮助!

此外,获取查询参数的正确方法是:

$startDate = $request->getQueryParam(‘startDate’);

$endDate = $request->getQueryParam(‘endDate’);