PHP Slim REST API возвращает нуль после вызова функции get

0

Я разработал простой 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, и всякая помощь была бы весьма признательна.

Теги:
rest
slim

2 ответа

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

0

В вашем подготовленном коде оператора есть две потенциальные проблемы.

Во-первых, вы говорите, что параметр является int:

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

i указывает Integer. Пока вы хотите строку (s).

Вторая проблема заключается в том, что при использовании LIKE в подготовленном заявлении вам все равно нужны знаки % используемые в стандартном LIKE.

Например:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню