我使用PHP Slim开发了一个简单的REST API,并实现了一个简化的函数,该函数将在匹配通过thing REST调用的专辑名称时返回曲目列表。
这是我的index.php文件,用于进行那些rest调用,
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调用后,它为每个跟踪项返回null值。我只想提一下,我已经从更改了SQL查询
。。。和CCD_ 1。album_name
喜欢吗
至
。。。和CCD_ 3。album_id
喜欢吗
和它的工作,但由于某种原因,它不能与以下查询一起工作
。。。和CCD_ 5。album_name
喜欢吗
我是PHP的新手,任何形式的帮助都将不胜感激。
$stmt->bind_param("i", $album_keyword);
绑定类型为INTEGER
的参数。更改为$stmt->bind_param("s", $album_keyword);
以绑定类型为album
0的参数。
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%");