Как бы я закодировал форму поиска PHP для поиска в таблице базы данных, содержащей массив JSON?

#php #mysql

Вопрос:

Я работал над этим большую часть дня, я, наконец, немного узнал о json_decode том, что теперь я могу успешно получать конкретные данные для вошедшего в систему пользователя.

Теперь я хочу, чтобы люди могли использовать поиск на PHP, который может выполнять поиск в моей базе данных с массивом JSON — я хочу, чтобы он искал $charinfo [«имя»] и $charinfo [«фамилия»]. Я надеюсь, что мой вопрос имеет смысл. Я провел исследование и не нашел никаких решений, которые помогли бы мне (я перепробовал их все).

Вот код, который у меня есть до сих пор…. (Я знаю, я только что изучил процедурный PHP, так что это то, что мне больше всего нравится на данный момент)

 <form method="GET" action="person-lookup.php">
  <input type="text" name="search"/>
  <input type="submit" value="search">
</form>
               <?php
                 if(isset($_GET['search'])){
                                            
                 $key = $_GET["search"];
                 $chars = "SELECT * FROM players WHERE 'charinfo' LIKE '%key%'";
                                                
                 while($row=mysqli_fetch_assoc($chars)) {
                    $charinfo_json = $row['charinfo'];
                                        

                 $charinfo = json_decode($charinfo_json, true);

                         echo $charinfo['firstname'];
                                    }
                                }

                                    ?>
 

и ошибка, которую я получаю при поиске формы, заключается в;

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, string given .

Комментарии:

1. $chars-это строка . Сначала используйте mysqli_query (например), чтобы вернуть mysqli_result, который можно использовать. Тогда это должно выглядеть чем-то сродни $result = mysqli_query($chars); mysqli_fetch_assoc($result); . Возможно, сейчас самое подходящее время переключиться на форму «ОО», которая также может помочь понять, «почему» в первую очередь нужен результат.

2. Это также подвержено внедрению SQL при попытке вставить значение поиска непосредственно в строку запроса SQL (что в данном случае даже не было сделано правильно из-за неудачной интерполяции), о чем есть примечание в приведенной выше ссылке.

3. Существует несколько случаев, когда хранение данных JSON в базе данных целесообразно, но это почти наверняка не один из них. Если вы хотите выполнить поиск в своих таблицах и обновить их, вам будет намного проще настроить правильные столбцы и получить прямой доступ к данным.

Ответ №1:

Попробуйте это , проблема в том, что вы не использовали функцию mysqli_query

 $con = mysqli_connect("localhost","my_user","my_password","my_db");
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  exit();
}

....

$query =  mysqli_query($con,$chars);
while($row=mysqli_fetch_assoc($query)) {
    $charinfo_json = $row['charinfo'];
    $charinfo = json_decode($charinfo_json, true);
    echo $charinfo['firstname'];
}
 

Комментарии:

1. Хороший ответ будет включать в себя объяснение того, что было изменено (так что ОП и любых будущих читателей не ушел с утомительной задачей сравнения кода ответа на вопрос код построчно, чтобы найти разницу), и, что более важно, почему это было изменено и каким способом он решает проблему, так что любой читатель может узнать от него.