PHP Slim REST API returns 调用 get 函数后为空

PHP Slim REST API returns null after calling get function

我使用 PHP Slim 开发了一个简单的 REST API 并实现了一个简单的功能,该功能将 return 在匹配通过 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() 函数,用于 return 在匹配专辑名称后列出曲目,

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 调用每个轨道项的 returns 空值之后。顺便提一下,我已经将 SQL 查询从

更改为

... 和album.album_name 喜欢 ?

... 和album.album_id 赞 ?

及其作品,但由于某些原因,它不适用于以下查询

... 和album.album_name 喜欢 ?

我是 PHP 的新手,非常感谢任何帮助。

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

类型的参数

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

您的预处理语句代码中存在两个潜在问题。

首先,你告诉语句参数是一个 int:

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

i表示整数。虽然你想要一个字符串 (s).

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

例如:

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