PHP 从 MySQL 字段中删除特定数字

PHP remove specific numbers from MySQL field

我的数据库结构如下:

id  |  posts |  groups
----+--------+-----------
1   |   10   |  2
2   |   30   |  2
3   |   20   |  2
4   |   50   |  2,8
5   |   54   |  2,8

当用户达到 50 个或更多 post 时,我希望脚本删除组“2”。已经有一个添加“8”的先前脚本。

我有这个:

$cusstring = mysql_query("SELECT `groups` FROM `users` WHERE `postnum` >= 50 ");

$row = mysql_fetch_array($cusstring);

$array = explode(',', $row[groups]);
$pos = array_search('2', $array);
unset($array[$pos]);
$row[groups] = implode(',', $array);

mysql_query("UPDATE `users` SET `groups` = $row[groups] WHERE `postnum` >= 50 ");

它似乎没有更新。我不知道这是因为它在数组中拾取了多个字段,还是我对大于或等于符号做错了。

谁能提供解决方案?

谢谢。

编辑: 我已经计算出,如果我将符号更改为等于查询在第一行工作,它会遇到 post 计数 50,但它会保留其余部分。看起来它只能处理一行。

我认为这对你有用。我认为 SQL 方法会更有效,但您说过要将其保留在 PHP。

$cusstring = mysql_query("SELECT `groups`, `id ` FROM `users` WHERE `postnum` >= 50 ");
while($row = mysql_fetch_array($cusstring)) {
    $groups = mysql_real_escape_string(preg_replace('~(^|\s+)2(,|$)~', '', $row['groups']));
    //regex demo https://regex101.com/r/eX7qD1/1
    $id = (int)$row['id'];
    mysql_query("UPDATE `users` SET `groups` = '$groups' WHERE `id ` = $id ");
}

您的代码只获取了一条记录,因为您没有循环获取。

也不要将来自数据库的数据直接放回查询中,这可能会导致 SQL 注入。请注意,我将此处的 ID 转换为 int 并转义了 groups 值。这应该可以防止注射的可能性。

您应该将驱动程序切换到 PDOMYSQLI。使用这些驱动程序之一后,您可以使用准备好的语句。

如果 2 是唯一的值,此解决方案还将在组字段中放置一个空值。