【问题标题】:PHP Slim REST API returns null after calling get functionPHP Slim REST API 在调用 get 函数后返回 null
【发布时间】:2015-03-23 17:42:15
【问题描述】:

我使用 PHP Slim 开发了一个简单的 REST API,并实现了一个简单的函数,该函数将在匹配专辑名称时返回一个曲目列表,并通过思想 REST 调用。

这是我用来进行休息调用的 index.php 文件,

http://localhost/my_gallery/v1/tracks/:name

$app->get('/tracks/:name', 'authenticate', function($album_keyword) {
    global $user_id;
    $response = array();
    $db = new DbHandler();

    // fetch task
    $result = $db->getTracksByName($album_keyword);

    if ($result != NULL) {
        $response["error"] = false;
        $response["album_name"] = $result["album_name"];
        $response["track_artist"] = $result["track_artist"];
        $response["track_name"] = $result["track_name"];
        echoRespnse(200, $response);
    } else {
        $response["error"] = true;
        $response["message"] = "The requested resource doesn't exists";
        echoRespnse(404, $response);
    }
});

这是 getTracksByName() 函数,用于在匹配专辑名称后返回曲目列表,

public function getTracksByName($album_keyword) {
    $stmt = $this->conn->prepare(
        "SELECT `album`.album_name, `track`.track_artist, `track`.track_name "
        . "FROM `category_album` ,`album` , `track` "
        . "where `album`.album_id=`track`.album_id AND`album`.`album_name` LIKE ?");
    $stmt->bind_param("i", $album_keyword);

    if ($stmt->execute()) {
        $res = array();
        $stmt->bind_result($album_name, $track_artist, $track_name);
        $stmt->fetch();
        $res["album_name"] = $album_name;
        $res["track_artist"] = $track_artist;
        $res["track_name"] = $track_name;
        $stmt->close();
        return $res;
    } else {
        return NULL;
    }
}

现在调用 REST 后,它会为每个轨道项目返回空值。顺便提一下,我已经从

更改了 SQL 查询

... ANDalbum.album_name 喜欢?

... ANDalbum.album_id 喜欢?

它的作品,但由于某种原因,它不适用于以下查询

... ANDalbum.album_name 喜欢?

我对 PHP 完全陌生,如果能提供任何帮助,我将不胜感激。

【问题讨论】:

    标签: php rest slim


    【解决方案1】:

    $stmt->bind_param("i", $album_keyword); 绑定INTEGER 类型的参数。更改为$stmt->bind_param("s", $album_keyword); 以绑定STRING 类型的参数。

    http://php.net/manual/en/mysqli-stmt.bind-param.php

    【讨论】:

      【解决方案2】:

      准备好的语句代码中有两个潜在问题。

      首先,你告诉声明参数是一个int:

      $stmt->bind_param("i", $album_keyword);
      

      i 表示整数。当你想要一个字符串时(s)。

      第二个问题是在准备好的语句中使用LIKE 时,您仍然需要在标准LIKE 中使用% 符号。

      例如:

      $stmt->bind_param("s", "%$album_keyword%");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-04
        • 1970-01-01
        • 2023-03-29
        • 2021-06-27
        • 1970-01-01
        • 1970-01-01
        • 2013-05-02
        • 1970-01-01
        相关资源
        最近更新 更多