Здесь есть несколько проблем. Основная проблема, с которой вы сталкиваетесь, заключается в том, что в вашем запросе нет обработки ошибок и синтаксической ошибки. Вокруг столбцов списка выбора не должно быть скобок:
$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)");
Теперь, вместо того, чтобы выполнять запрос в цикле, вам нужно только выбрать его в цикле. Это гораздо эффективнее, чем запрашивать снова и снова.