【问题标题】:PHP slimframework GET request doesn't return anythingPHP slimframework GET请求不返回任何内容
【发布时间】:2018-05-07 18:27:35
【问题描述】:

所以我使用 PHP slimframework (https://www.slimframework.com/) 只是一个我需要在我的 React 应用程序中使用的简单 API,我无法让我的查询使用这些参数,因为 $start_date 和 $end_date 没有从获取请求。这个 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)

有什么想法吗?

【问题讨论】:

    标签: php mysql reactjs get slim


    【解决方案1】:
    $startDate = $request->getQueryParam('startDate');
    $endDate = $request->getQueryParam('endDate');
    

    还要注意那个查询,它很容易受到 SQL 注入的攻击。您必须使用准备好的语句。见https://phpdelusions.net/pdo#prepared

    【讨论】:

    【解决方案2】:

    尝试使用 \Request slim 类获取您的参数,例如:$paramValue = $app-&gt;request()-&gt;params('paramName');

    您可以在Here,Slim v2 文档中了解更多信息

    【讨论】:

    • 不幸的是,它不起作用,我也已经尝试过了,正如您在上面看到的(它只是被注释掉了)。从昨天开始我就被它困住了..
    • 如果你var_dump($_GET),不返回什么?您是否尝试过通过邮递员请求?
    • var_dump($_GET) 只返回 array(0) { } [] 响应状态:200 (OK)
    • 问题肯定是 $_GET 不会返回所有内容,因为如果我使用具有固定 startDate 和 endDate 的查询,像这样 $sql = "SELECT * FROM datescalendar where date BETWEEN ' 1525679047'和'1526283847'";然后它起作用了..真令人沮丧
    • 刚刚开始了一个新的 slim 3 项目并编码了 &lt;?php use \Psr\Http\Message\ServerRequestInterface as Request; use \Psr\Http\Message\ResponseInterface as Response; $app-&gt;get('/[{name}]', function (Request $request, Response $response, array $args) { var_dump($request-&gt;getQueryParams()); }); 它工作正常。
    【解决方案3】:
    $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" } 
    });
    

    我认为你的请求只是空的

    【讨论】:

    • 我该怎么办?如何使我的请求不为空?这是我的参数如何更改gyazo.com/ee452d5f7576a44169b15eacf6e10118(每次我点击下周或前一周)。
    • 哇...我明白了。它很奇怪。愿你可以尝试不苗条的纯粹调用你的 GET 的 php 转储。否则,您可以尝试 /api/stuff/[{start}]/[{end}] 语法(slim router doc)
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多