我使用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查询 ...和album
。album_name
喜欢?
到
...和album
。album_id
喜欢?
及其作品但由于某种原因它不能使用以下查询
...和album
。album_name
喜欢?
我是PHP的新手,我会非常感谢任何帮助。
答案 0 :(得分:0)
$stmt->bind_param("i", $album_keyword);
绑定INTEGER
类型的参数。更改为$stmt->bind_param("s", $album_keyword);
以绑定类型为STRING
的参数。
答案 1 :(得分:0)
准备好的语句代码中存在两个潜在问题。
首先,您告诉声明该参数是一个int:
$stmt->bind_param("i", $album_keyword);
i
表示整数。虽然你想要一个字符串(s
)。
第二个问题是,在准备好的声明中使用LIKE
时,您仍然需要标准%
中使用的LIKE
符号。
例如:
$stmt->bind_param("s", "%$album_keyword%");