PHP REST API 查询返回空正文

Posted

技术标签:

【中文标题】PHP REST API 查询返回空正文【英文标题】:PHP REST API query returning empty body 【发布时间】:2018-10-08 01:26:23 【问题描述】:

我无法让我的 php Rest API 工作,它只是返回空正文 带有成功的 HTTP 请求 (200)。

当我只是回显某些内容时,它会很好地返回。我正在使用 Slim(PHP 微框架)mysql,apache。数据库表在 phpmyadmin 中创建。

index.php

<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../vendor/autoload.php';
require '../src/config/db.php';

$app = new \Slim\App;
$app->get('/hello/name', function (Request $request, Response $response) 
    $name = $request->getAttribute('name');
    $response->getBody()->write("Hello, $name");

    return $response;
);

// Customer Routes
require '../src/routes/dates.php';

$app->run();

db.php 它还包含 dbhost、dbuser、dbpass 和 dbname 上面的变量

<?php
class db

    // Properties
    var $dbhost = 'localhost';
    var $dbuser = 'root';
    var $dbpass = 'parool1';
    var $dbname = 'slimapp';

    // Connect
    public function connect()
    
        $mysql_connect_str = "mysql:host=$this->dbhost;dbname=$this->dbname";
        $dbConnection = new PDO($mysql_connect_str, $this->dbuser, $this->dbpass);
        $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $dbConnection;
    

dates.php

<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app = new \Slim\App;

// Get All Calendar Dates
$app->get('/api/date', function (Request $request, Response $response) 
    $sql = "SELECT * FROM `calendardates`";

    try 
        // Get DB Object
        $db = new db();
        // Connect
        $db = $db->connect();

        $stmt = $db->query($sql);
        $dates = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo json_encode($dates);
     catch (PDOException $e) 
        echo '"error": "text": ' . $e->getMessage() . '';
    
);

解决方案:

将数据库表的排序规则更改为 utf8(如果您想在数据库表中使用“ö、ä、ü”等字符)。

我变了

$dbConnection = new PDO($mysql_connect_str, $this->dbuser, $this->dbpass);

$dbConnection = new PDO($mysql_connect_str, $this->dbuser, $this->dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

解决问题。

【问题讨论】:

你能添加var_dump($dates)输出吗? 你试过return $response-&gt;withJson($dates)吗? var_dump($dates) 返回:array(2) [0]=> object(stdClass)#65 (3) ["id"]=> string(1) "1" [ "date_title"]=> string(9) "Nuudip�ev" ["date_date"]=> string(10) "1515283200" [1]=> object(stdClass)#66 (3) ["id"] => string(1) "2" ["date_title"]=> string(13) "Taliharjap�ev" ["date_date"]=> string(10) "1515888000" 【参考方案1】:

要返回一个 json 尝试替换

echo json_encode($dates);

return $response->withJson($dates);

按照 mim 在评论中的建议。

【讨论】:

以上是关于PHP REST API 查询返回空正文的主要内容,如果未能解决你的问题,请参考以下文章

php 允许REST API每页返回50个以上的事件; `per_page` URL查询参数。

REST API 最佳实践:查询字符串中的参数与请求正文中的参数

带有 Kotlin 和 Spring BootPost 的 REST API 返回空对象

Javascript 到 PHP PDO 到 MySQL 查询返回空

Binance REST API - 通过查询字符串下达 PHP 订单 (POST)

检测空对象数组