Как отфильтровать ответ Rest api, используя базу данных mysql в PHP - PullRequest
0 голосов
/ 01 апреля 2020

В настоящее время я работаю над JSON проектом Api, использующим базы данных php и mysql. Мне удалось создать сообщение и получить функцию успешно. Я пытаюсь реализовать функцию фильтра, но могу получить только один результат. даже если более одного результата имеют одинаковые имена. Пример: моя база данных содержит «chuck» и «chuck Morris», когда я ищу «chuck», я хочу получить оба имени, но получаю только результат с точным именем то есть "chuck" только один результат Вот мой код для функции поиска

public function read_singleName() {
    $sql_query = "SELECT * FROM ".$this->table_name . " WHERE name = ?";
    $obj = $this->conn->prepare($sql_query);
    $obj->bind_param("s", $this->name);
    $obj->execute();
    $data = $obj->get_result();
    return $data->fetch_assoc();
}

Вот код для отображения результатов

if($_SERVER['REQUEST_METHOD'] === "GET"){

  $artist_name = isset($_GET['name']) ? strval($_GET['name']) : "";

  if(!empty($some_name)){

    $some->name = $some_name;
    $some_data = $some->read_singleName();

    if(!empty($some_data)){
      http_response_code(200);
      echo json_encode(array(
          "status" => 1,
          "data" => $some_data
      ));
    } else{
      http_response_code(500);
      echo json_encode(array(
        "status" => 0,
        "message" => "Name Not Found"
      ));
    }   
    }   

} else{
    http_response_code(503);
    echo "Access Denied";
    echo json_encode(array(
        "status" => 000,
        "message" => "Failed"
    ));
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Вам нужно использовать LIKE, а не =.

Когда вы сделаете это:

    $sql_query = "SELECT * FROM ".$this->table_name . " WHERE name = ?";

Вы получите только точные совпадения.

Что вам нужно, это:

    $sql_query = "SELECT * FROM ".$this->table_name . " WHERE name LIKE ?";

А затем используйте % символы в качестве подстановочных знаков.

Здесь будет найдено все, что начинается с "chuck"

WHERE name LIKE 'chuck%'

Другой пример, где "chuck" может быть где угодно.

WHERE name LIKE '%chuck%'
0 голосов
/ 01 апреля 2020

Не знаю, что такое $this->conn, но я думаю, что вы должны вызвать fetch_assoc() через некоторое время l oop, пока не останется больше записей

while($record = $data->fetch_assoc()){
    // do something with $record
}

Также запрос должен выглядеть следующим образом: SELECT * FROM ".$this->table_name . " WHERE name LIKE '%chuck%'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...