使用 MyBB 创建 MySQL 查询以分解存储字符串的字段

Creating MySQL query with MyBB to explode a field storing a string

我目前正在使用 MyBB 设置,我正在尝试执行 SQL 查询,该查询可以检查用户是否属于某个附加组。但是,我遇到了困难。

MyBB 在一个用逗号分隔的 VARCHAR 字段中存储额外的组 ID,例如 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 我似乎按照他们构建条件的方式进行操作,但出现以下错误:

致命错误:未捕获的 PDOException:SQLSTATE[HY000]:一般错误:模式必须是 E:\xampp\htdocsthinfantrybrigade.co.uk\orbat.[=39= 中的整数]:180 堆栈跟踪:#0 E:\xampp\htdocsthinfantrybrigade.co.uk\orbat.php(180): PDO->query('SELECT username...', ', 1)') #1 {main} 在第 180

行的 E:\xampp\htdocsthinfantrybrigade.co.uk\orbat.php 中抛出

有什么建议吗?

最终目标是打印满足该条件的用户列表。

谢谢。

$stmt = $conn->query('SELECT username, additionalgroups FROM my_users WHERE SUBSTRING_INDEX(\'30\', \',\', 1)');

最好是这样,引号外的,会给PHP带来麻烦。

$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>';
}