Как я могу сделать этот запрос MySQL работать без получения пустых результатов? - PullRequest
1 голос
/ 15 августа 2011

У меня проблемы с получением результатов, которые я хочу получить из этого запроса MySQL. И я думаю, что проблема заключается в этой строке кода:

$ group = "SELECT * from mybb_users, где usergroup AND extragroups = '$ usergroup'";

потому что я заметил, что столбец дополнительных групп в базе данных имеет более одного значения, разделенных запятой (,), тогда как группа пользователей имеет только ОДНО значение. Вот скриншот:

вот изображение: http://i.imgur.com/UTbmX.jpg

Весь код работает идеально, если я удаляю столбец дополнительных групп из кода и проверяю только столбец группы пользователей, но это не то, что я хочу :( Ниже приведен весь код:

// Connect to server and select databse.
mysql_connect("$db_host", "$db_user", "$db_pass")or die("cannot connect to mysql"); 
mysql_select_db("$db_name")or die("cannot select DB");

$id=$_GET['lid'];     // Get lid from URL
$usergroup =$_GET['game'];       // Get the usergroup/game from the URL

// Check to see if the user is a VIP Member and fetch them.
$group="SELECT * from mybb_users where usergroup AND additionalgroups = '$usergroup'";
$group2=mysql_query($group) or die("Could not get users");
while($raw=mysql_fetch_array($group2))
{
// Fetch all UserIDs of the VIP members and match them with the UfID (in the userfields table)
$userid = $raw['uid'];
$group3="SELECT * from mybb_userfields where ufid = '$userid'";
$group4=mysql_query($group3) or die("Could not match userid");
while($raw=mysql_fetch_array($group4))
{
// assigns a lid from the vip members to the variable $lid
$lid = $raw['fid7'];
// Display the hash of the lid if it matches with the lid from the URL
if($lid == '')
{

}
elseif($lid == $id)
{
echo "[key]{$lid};";
}
else
{
}
}

}

Ответы [ 2 ]

4 голосов
/ 15 августа 2011

На пути к проверке используется функция FIND_IN_SET.

SELECT * from mybb_users where usergroup AND FIND_IN_SET('$usergroup', additionalgroups) != 0
1 голос
/ 15 августа 2011

Я не уверен насчет where usergroup AND ... - это usergroup поле БД? Во всяком случае, вы можете сделать это с

$group="SELECT * from mybb_users where usergroup AND FIND_IN_SET('$usergroup', additionalgroups) != 0;

Но этого еще недостаточно. AFAICS вы уязвимы для SQL-инъекций. Пожалуйста, используйте mysql_real_escape() в нужных местах, а именно везде, где вы помещаете переменные с пользовательским вводом в SQL-запрос.

...