Ошибка выбора базы данных mysqli_query

Я пытаюсь выбрать текст из базы данных, но только текст, который был опубликован с определенными именами пользователей. По сути, мне нужно, чтобы кто-то посмотрел на этот код 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'];
}
}

0

Решение

Как подсказка: второй цикл присваивает результат 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'"
0

Другие решения

Проблема в коде заключается в том, что $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>";
}
}
2

По вопросам рекламы [email protected]