Проблема с PHP и MySQL - запрос не работает - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь создать таблицу пользователей, которые являются частью группы, но я не могу заставить ее работать. Список хранится в столбце, так что каждый идентификатор пользователя # отделяется знаком «~». Например, если пользователи 1,2 и 3 посещают столбец, будет отображаться «1 ~ 2 ~ 3». Это то, для чего я использую взрыв.

Я получаю следующую ошибку: «Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, логическое значение указано в», что соответствует строке, в которой определен $ friend.

$attendingUsers = mysql_query("Select acceptedInvites from events where eventID = ".$_GET['eventID']." ");
    while($friend = mysql_fetch_array($attendingUsers)){
                $users = $friend['acceptedInvites'];
                $userExplode = explode("~",$users);
            for($i=0; $i<count($userExplode);$i++){
                echo $userExplode[$i]; //displays the userid number properly so I know this is working
                $friendInfo = mysql_query("select (userid,username) from users where userid = '". $userExplode[$i]."' ");;
                $friend = mysql_fetch_array($friendInfo);
                echo '<table><tr><td><a href="profile.php?userid=' . $friend['userid'] . '">' . $friend['username'] . '</a></td>';
                }
            }

Я начинаю думать, что это как-то связано с $ friendInfo, потому что, когда я его отображаю, ничего не отображается (обычно это будет массив).

1 Ответ

5 голосов
/ 09 февраля 2012

Здесь есть несколько проблем. Основная проблема, с которой вы сталкиваетесь, заключается в том, что в вашем запросе нет обработки ошибок и синтаксической ошибки. Вокруг столбцов списка выбора не должно быть скобок:

$friendInfo = mysql_query("select userid, username from users where userid = '". $userExplode[$i]."' ");
//-------------------------------^^^^^^^^^^^^^^^^^^

Некоторая базовая обработка ошибок обнаружит следующие ошибки:

$friendInfo = mysql_query("select userid, username from users where userid = '". $userExplode[$i]."' ");
if (!$friendInfo) {
  // error!
  echo mysql_error();
}
else {
  $friend = mysql_fetch_array(....);
}

Вы должны экранировать входные параметры от внедрения SQL, а не использовать их непосредственно в запросе. Это проще всего сделать с mysql_real_escape_string().

$attendingUsers = mysql_query("Select acceptedInvites from events where eventID = ". mysql_real_escape_string($_GET['eventID'])." ");

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

$userExplode = explode("~", $users);
// Implode them together with commas
// Don't forget to call mysql_real_escape_string() on these if necessary
$friendlist = implode(",", $userExplode);
// Actually, you could just do $friendlist = str_replace("~", ",", $users)
// and avoid doing either explode() or implode()...

// Then query with an IN () clause...
$friendInfo = mysql_query("select userid, username from users where userid IN ($friendlist)");

Теперь, вместо того, чтобы выполнять запрос в цикле, вам нужно только выбрать его в цикле. Это гораздо эффективнее, чем запрашивать снова и снова.

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