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

时间:2018-05-16 23:18:07

标签: php mysql substring mybb

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

MyBB将其他组ID存储在一个由逗号分隔的VARCHAR字段中,例如1,23,27,30,49等。我知道在PHP中,我可以使用逗号作为分隔符来爆炸字符串。我知道MySQL无法爆炸,但我可以使用substring_index来实现类似的目标。注意,每个用户可以随机列出其他组,因此并非所有用户都是相同的。

我正在尝试这个

Baz

这似乎不起作用。看https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index我似乎正在按照他们构建条件的方式,但我得到以下错误:

致命错误:未捕获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}投放在第180行的E:\ xampp \ htdocs \ 11thinfantrybrigade.co.uk \ orbat.php

请问任何建议?

最终目标是打印符合该标准的用户列表。

谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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