php - PHP REST API 查询返回空正文
问题描述
我无法让我的 PHP Rest API 工作,它只是返回一个成功的 HTTP 请求(200)的空正文。
当我只是回显某些内容时,它会很好地返回。我正在使用 Slim(PHP 微框架)MySQL
、. apache
数据库表在 phpmyadmin 中创建。
索引.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;
}
}
日期.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"));
解决问题。
解决方案
要返回 json 尝试替换
echo json_encode($dates);
和
return $response->withJson($dates);
正如 mim 在评论中所建议的那样。
推荐阅读
- react-native - 如何在 React Native 中使用 Firebase 实现 Microsoft 登录?
- java - 使用 com.sun.tools 附加到当前 VM
- android - Tasks.await(task) 显示不适当的阻塞方法调用警告
- php - 导入用分号分隔并用引号分隔的 CSV
- html - HTML5 输入的“min”属性不会使日历的过去日期变灰
- openldap - 为 ldapjs 服务器端排序创建客户端控制对象
- azure-devops - 链接 Azure DevOps CI 和 CD yaml 管道
- cron - 可以将 cron 作业设置为每小时 5 分钟后运行吗?
- php - 使用蒸汽冷凝器库未找到“SourceServer”类
- reactjs - 单击选择字段中的渲染项目?