Я пытаюсь выбрать текст из базы данных, но только текст, который был опубликован с определенными именами пользователей. По сути, мне нужно, чтобы кто-то посмотрел на этот код PHP и MySQL и сказал, что с ним что-то не так. Я надеюсь, что дал достаточно информации. Кроме того, я получаю следующее сообщение об ошибке: Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, строка задана в … Спасибо! Вот код:
$followed = mysqli_query($con,"SELECT followed FROM follows WHERE follower = '$username'");
while($row = mysqli_fetch_array($followed)){
echo $row['followed']."<br>";
$followed = $row['followed'];
$random = mysqli_query($con,"SELECT text FROM post WHERE user = '$followed'");
while($row = mysqli_fetch_array($random)){
echo "<ul><li id = 'stream-post'>";
echo $row['text'];
echo "</li></ul>";
$user = $row['user'];
}
}
Как подсказка: второй цикл присваивает результат row
который уже содержит строку из первого запроса. Используйте другое имя переменной:
...
while($row = mysqli_fetch_array($followed)){
echo $row['followed']."<br>";
$followed = $row['followed'];
$random = mysqli_query($con,"SELECT text FROM post WHERE user = '$followed'");
while($subrow = mysqli_fetch_array($random)){
echo "<ul><li id = 'stream-post'>";
echo $subrow['text'];
....
второй: столбец user
не является частью либо SELECT (... $user = $row['user'];
)
Я полагаю, это второй запрос:
"SELECT user, text FROM post WHERE user = '$followed'"
Проблема в коде заключается в том, что $followed
переменная, содержащая результат SQL. И после первой выборки это перезаписывается строковым значением. В следующий раз через цикл, $followed
больше не является ссылкой на набор результатов, возвращаемый запросом.
Там также попытка получить ключ 'user'
из массива $row
и ключ не существует в массиве.
Кроме того, ваш код уязвим для SQL-инъекций, и нет проверки, является ли возврат из запроса успешным или нет. Мы бы предпочли увидеть готовые заявления с связывать заполнители, но, как минимум, вы должны звонить mysqli_real_escape_string
Функция на «небезопасных» значениях, и включить возврат из функции в тексте SQL.
Вот пример шаблона, которому я предпочитаю следовать
# set the SQL text to a variable
$sql = "SELECT followed FROM follows WHERE follower = '". mysqli_real_escape_string($con, $username) . "' ORDER BY 1";
# for debugging
#echo "SQL=" . $sql;
# execute the query
$sth = mysqli_query($con, $sql);
# check if query was successful, and handle somehow if not
if (!$sth) {
die mysqli_error($con);
}
while ($row = mysqli_fetch_array($sth)) {
$followed = $row['followed'];
echo htmlspecialchars($followed) ."<br>";
# set SQL text
$sql2 = "SELECT text FROM post WHERE user = '". mysqli_real_escape_string($con, $followed) . "' ORDER BY 1";
# for debugging
#echo "SQL=" . $sql2;
# execute the query
$sth2 = mysqli_query($con, $sql2);
# check if query execution was successful, handle if not
if (!$sth2) {
die mysqli_error($con);
}
while ($row2 = mysqli_fetch_array($sth2)) {
$text = $row2['text'];
echo "<ul><li id = 'stream-post'>" . htmlspecialchars($text) . "</li></ul>";
}
}