Php 为什么API REST的GET函数不返回任何值?
我正在使用Php 为什么API REST的GET函数不返回任何值?,php,mysql,api,rest,phpmyadmin,Php,Mysql,Api,Rest,Phpmyadmin,我正在使用XAMPP和PhpMyAdmin来存储我的数据库,我正在尝试创建一个API REST,但没有得到好的结果。为此,我使用了Slim框架 我将所有Slim framework文件放在xampp文件夹中名为project的/htdocs文件夹中,并创建connect.php和api.php文件。我还将index.php更改为使用我前面提到的两个文件 我配置了connect.php和index.php文件,并在api.php文件中创建了GET方法,但当我试图获取数据库中的信息时,我无法获得任何
XAMPP
和PhpMyAdmin
来存储我的数据库,我正在尝试创建一个API REST,但没有得到好的结果。为此,我使用了Slim框架
我将所有Slim framework文件放在xampp
文件夹中名为project
的/htdocs
文件夹中,并创建connect.php
和api.php
文件。我还将index.php
更改为使用我前面提到的两个文件
我配置了connect.php
和index.php
文件,并在api.php
文件中创建了GET方法,但当我试图获取数据库中的信息时,我无法获得任何值
我的意思是,connect.php
和api.php
这两个文件都位于名为app
的文件夹中,而且它们分别位于另一个名为libs
和routes
的文件夹中
/project/app/libs/connect.php
/project/app/routes/api.php
我把我所有的代码都放在这里:
index.php
<?php
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
define("SPECIALCONSTANT",true);
require 'app/libs/connect.php';
require 'app/routes/api.php';
$app->run();
?>
<?php
if(!defined("SPECIALCONSTANT")) die("Access denied");
function getConnection()
{
try{
$db_username = "root";
$db_password = "";
$connection = new PDO("mysql:host=localhost;dbname=project",$db_username,$db_password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
return $connection;
}
?>
<?php
if(!defined("SPECIALCONSTANT")) die("Access denied");
$app->get("/users/",function() use($app)
{
try{
$connection = getConnection();
$dbh = $connection->prepare("SELECT * FROM users");
$dbh->execute();
$users = $dbh->fetchAll();
$connection = null;
$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode($users));
}catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
});
跟踪
0 C:\xampp\htdocs\project\app\routes\api.php(21): Slim\Slim::handleErrors(8, 'Undefined varia...', 'C:\\xampp\\htdocs...', 21, Array)
1 [internal function]: {closure}()
2 C:\xampp\htdocs\project\Slim\Route.php(468): call_user_func_array(Object(Closure), Array)
3 C:\xampp\htdocs\project\Slim\Slim.php(1357): Slim\Route->dispatch()
4 C:\xampp\htdocs\project\Slim\Middleware\Flash.php(85): Slim\Slim->call()
5 C:\xampp\htdocs\project\Slim\Middleware\MethodOverride.php(92): Slim\Middleware\Flash->call()
6 C:\xampp\htdocs\project\Slim\Middleware\PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call()
7 C:\xampp\htdocs\project\Slim\Slim.php(1302): Slim\Middleware\PrettyExceptions->call()
8 C:\xampp\htdocs\project\index.php(19): Slim\Slim->run()
9 {main}
EDIT2:现在我知道问题出在json\u encode
上,因为当我使用json\u last\u error()
时,它给了我一个错误:json\u error\u UTF8
。那一刻我无法解决它。改变
$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode($users));
到
它不起作用。现在它给了我一个“细长应用程序错误”,而不是一个空白页。为什么,在你看来,我不必使用$app?我以前没有使用过'Slim'框架,所以我不知道你为什么要使用
$app
,我只是给了你一个原生的方法(我相信它是有效的):如果你看到它页面的文档(我在上面放的),它像setBody一样放,但也不起作用。我遵循了一个教程,但它对我也不起作用。我不知道该怎么办。我要编辑我的问题,把我的错误放进去。你试过var\u dump($users)
了吗,它好像是空的,在哪里?回声句的前后?
$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode($users));
header("HTTP/1.1 200");
header("Content-Type:application/json; charset=utf-8");
echo json_encode($users);