【问题标题】:Why my GET function of my API REST doesnt return any value?为什么我的 API REST 的 GET 函数没有返回任何值?
【发布时间】:2015-05-31 20:12:56
【问题描述】:

我正在使用XAMPPPhpMyAdmin 来存储我的数据库,并且我正在尝试制作一个API REST,但我没有得到好的结果。为此,我正在使用 Slim 框架。

我将所有 Slim 框架文件放在 /htdocs 内的 xampp 文件夹中的一个名为 project 的文件夹中,然后创建我的 connect.phpapi.php 文件。我还更改了我的index.php 以使用我之前提到的两个文件。

我配置了我的 connect.phpindex.php 文件,并在 api.php 文件中创建了我的 GET 方法,但是当我尝试获取数据库中的信息时,我无法获得任何价值。

我的意思是,connect.phpapi.php 这两个文件都位于名为 app 的文件夹中,而且它们分别位于另一个名为 libsroutes 的文件夹中。

/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();

?>

connect.php

<?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;
}
?>

api.php

<?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();
    }
});

我的数据库名称是project,我的数据库中的表名称是users。这个数据库保存在我的phpmyadmin

然后,我尝试使用我的get 方法在我的网址localhost/project/users/ 中返回我在此表上的值,但它不起作用。我刚看到一个空白页,我在 Internet 上看到它必须给我我表中的值。

虽然我的问题可能出在headersstatusbody,因为我无法非常正确地理解它们,我在文档中搜索它们,但它对我没有多大帮助。我搜索的页面是:

http://docs.slimframework.com/response/headers/ http://docs.slimframework.com/response/status/http://docs.slimframework.com/response/body/

所以,如果您还可以添加一些信息来澄清这些概念,我将非常感谢你们所有人。

我是 API REST 的新手,我看不到我的错误(我正在使用教程)。为什么它不起作用?

编辑:我尝试了 Abdo Adel 的提议,但也没奏效。它给了我以下错误。

详情

Type: ErrorException
Code: 8
Message: Undefined variable: users
File: C:\xampp\htdocs\proyecto\app\routes\api.php
Line: 21 --> Here it's the line when I have echo sentence

追踪

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_encode 上,因为当我使用json_last_error() 时,它给了我错误:JSON_ERROR_UTF8。到那时我无法解决它。

【问题讨论】:

    标签: php mysql api rest phpmyadmin


    【解决方案1】:

    改变

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

    【讨论】:

    • 它不起作用。现在它给了我一个“Slim Application Error”而不是一个空白页。在您看来,为什么我不必使用 $app?
    • 我之前没有使用过'Slim'框架,所以我不知道你为什么应该使用$app,我只是给了你原生方法(我确信它正在工作) 这样做:D
    • 如果您看到其页面的文档(我放在上面),它就像 setBody 一样,但它也不起作用。我遵循了一个教程,但它对我也不起作用。我不知道该怎么做。我将编辑我的问题以解决我遇到的错误。
    • 你试过var_dump($users),好像失效了
    • 在哪里? echo 语句之前还是之后?
    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 2014-07-09
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多