Я разработал простой REST API, используя PHP Slim, и реализовал простую функцию, которая вернет список треков при совпадении имени альбома, пройденного мыслью REST.
Это мой файл index.php для совершения этих вызовов отдыха,
HTTP://локальный /my_gallery/v1/дорожки/: имя
$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
LIKE?
в
... И album
. album_id
LIKE?
и его работы, но по какой-то причине он не работает со следующим запросом
... И album
. album_name
LIKE?
Я абсолютно не знаком с PHP, и всякая помощь была бы весьма признательна.
$stmt->bind_param("i", $album_keyword);
связывает параметр типа INTEGER
. Измените на $stmt->bind_param("s", $album_keyword);
для привязки параметра типа STRING
.
В вашем подготовленном коде оператора есть две потенциальные проблемы.
Во-первых, вы говорите, что параметр является int:
$stmt->bind_param("i", $album_keyword);
i
указывает Integer. Пока вы хотите строку (s
).
Вторая проблема заключается в том, что при использовании LIKE
в подготовленном заявлении вам все равно нужны знаки %
используемые в стандартном LIKE
.
Например:
$stmt->bind_param("s", "%$album_keyword%");