#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. Хороший ответ будет включать в себя объяснение того, что было изменено (так что ОП и любых будущих читателей не ушел с утомительной задачей сравнения кода ответа на вопрос код построчно, чтобы найти разницу), и, что более важно, почему это было изменено и каким способом он решает проблему, так что любой читатель может узнать от него.