Создание MySQL-запроса с MyBB для взрыва поля, хранящего строку - PullRequest
0 голосов
/ 17 мая 2018

В настоящее время я работаю с MyBB, в котором я пытаюсь выполнить SQL-запрос, который может проверить, является ли пользователь частью определенной дополнительной группы.Однако у меня возникают трудности.

MyBB хранит дополнительные идентификаторы группы в одном поле VARCHAR, разделенном запятыми, например 1,23,27,30,49 и т. Д. Я знаю, что в PHP я могу разбивать строки, используязапятая как разделитель.Я понимаю, что MySQL не может взорваться, но я могу использовать substring_index для достижения аналогичной цели.Обратите внимание, что у каждого пользователя может быть случайный список дополнительных групп, поэтому не все пользователи будут одинаковыми.

Я пытаюсь это сделать

$stmt = $conn->query('SELECT username, additionalgroups FROM my_users WHERE SUBSTRING_INDEX(30, ',', 1)');
foreach ($stmt as $row)
{
    print '<div class="name"><a href="#">' . $row['username'] . '</a></div>';
}

Это, похоже, не работает.Глядя на https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index Кажется, я следую их способу построения условия, но я получаю следующую ошибку:

Неустранимая ошибка: Uncaught PDOException: SQLSTATE [HY000]: Общая ошибка: режим должен бытьцелое число в E: \ xampp \ htdocs \ 11thinfantrybrigade.co.uk \ orbat.php: 180 Трассировка стека: # 0 E: \ xampp \ htdocs \ 11thinfantrybrigade.co.uk \ orbat.php (180): запрос PDO->('ВЫБЕРИТЕ имя пользователя ...', ', 1)') # 1 {main}, брошенный в E: \ xampp \ htdocs \ 11thinfantrybrigade.co.uk \ orbat.php в строке 180

Любой совет, пожалуйста?

Конечная цель - распечатать список пользователей, соответствующих этим критериям.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018
$query = 'SELECT username FROM my_users WHERE CONCAT(",",additionalgroups,",") LIKE "%,30,%"' ; 

$stmt = $conn->query($query);
foreach ($stmt as $row)
{
    print '<div class="name"><a href="#">' . $row['username'] . '</a></div>';
}
0 голосов
/ 17 мая 2018
$stmt = $conn->query('SELECT username, additionalgroups FROM my_users WHERE SUBSTRING_INDEX(\'30\', \',\', 1)');

Желательно, чтобы это было так, как , вне кавычек вызовет проблемы с PHP.

...