调用get函数后,PHP Slim REST API返回null

时间:2015-03-23 09:30:40

标签: php rest slim

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

这是我的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查询

...和albumalbum_name喜欢?

...和albumalbum_id喜欢?

及其作品但由于某种原因它不能使用以下查询

...和albumalbum_name喜欢?

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

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

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

例如:

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