【问题标题】:$_GET['id'] returning null when passing URL with id$_GET['id'] 在传递带有 id 的 URL 时返回 null
【发布时间】:2021-01-04 01:17:51
【问题描述】:

我是 PHP 和 XAMPP mySQL 的新手。 我正在经历this tutorial,我正在尝试根据主键 - id 在我的数据库中返回特定行。

但是我的 $GET 调用似乎返回 null,并且调用 else 命令返回所有行。

这是我的数据库,表名为“students”:

这是我的 GET 调用:

//Check connection 
if ($conn -> connect_error){
    die("Connection failed: " .$conn->connect_error);
}

if ($_SERVER['REQUEST_METHOD'] === 'GET'){
    
 
    if (isset($_GET['id'])){
        //if id not null, id used to fetch single row
        $id = $conn->real_escape_string($_GET['id']);
        $sql = $conn->query("SELECT * FROM students WHERE id = '$id'");
        $data = $sql->fetch_assoc();
    }else{
        //else fetch all rows
        $data = array();
        $sql = $conn->query("SELECT * FROM students");
        while($d = $sql->fetch_assoc()){
            $data[] = $d;

        }
    }

    // Retunr json data
    exit(json_encode($data));

}

我正在 postman 中测试 $GET 命令,URL 指向我在 XAMMP 的 htdocs 目录中的 php CRUD API,并指定了表(学生)和索引:

http://localhost/crud_api/api/students/1.

查询将返回 200-OK 响应并返回与 else 语句保持一致的所有行。 所以我的问题是为什么 $GET['id] 返回 null?

【问题讨论】:

  • 没有您的原始表单,无法调试。作为调试工具,您可以注释掉其余代码并执行print_r($_GET);
  • GET 参数指定为http://localhost/crud_api/api/app.php/students/?id=1
  • 嗨,你能扩展'origin form吗?我在 Ionic 5 应用程序中使用相同的 url,但使用邮递员测试 API
  • 您的代码对 SQL 注入开放 - 请考虑使用Prepared Statements
  • 谢谢-但我正在学习教程

标签: php get postman


【解决方案1】:

序言:
GET(查询参数)通常这样指定:
https://example.com/?paramA=1&paramB=2&...paramN=X

正如@ProfessorAbronsius 在评论中正确指出的那样,即使资源的“面向公众”的 URL 没有指定此类参数,也可以在服务器级别指定/映射这些参数,例如使用 Apache 的 RewriteRule 指令。 (这正是 OP 链接的教程中的情况。)

问题在这种特定情况下似乎是 OP 使用的 URL 与教程中使用的 URL 不同:
http://localhost/crud_api/api/app.php/students/1http://localhost/crud_api/api/students/1

请查看教程如何定义重写规则以及在 Postman 中测试时 URL 的样子:

【讨论】:

猜你喜欢
  • 2018-01-13
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
相关资源
最近更新 更多