1

每次用户登录时,我都会保存他的 ID。为了限制程序的传播,我希望每个用户最多拥有 3 台设备。此语句使用 HardwareID 填充 DB

SQL:

UPDATE  license SET
        hardwareID3 = CASE WHEN hardwareID1 IS NOT NULL AND
                                hardwareID2 IS NOT NULL AND
                                hardwareID3 IS NULL
                                THEN $hwid
                                ELSE hardwareID3 END,
        hardwareID2 = CASE WHEN hardwareID1 IS NOT NULL AND
                                hardwareID2 IS NULL
                                THEN $hwid
                                ELSE hardwareID2 END,
        hardwareID1 = CASE WHEN hardwareID1 IS NULL
                                THEN $hwid
                                ELSE hardwareID1 END
        WHERE code = $lic AND $hwid NOT IN (COALESCE(hardwareID1,hardwareID2,hardwareID3, 0))

PHP:

$checkhwid = $VBPHP -> uphwid($hwid, $lic);

有2个问题:

  1. 当用户使用第二个 ID(例如“2”)登录 2 次时,值“2”也会写入 hardwareID3 列。

  2. 我想知道用户是否尝试使用第四个 ID 登录并返回错误。遗憾的是,我不能使用“真或假”ifs,因为当用户使用第一个 id 登录时,我会得到“真”的结果,如果他使用 ID 1 多次登录,我会得到假,因为声明没有改变任何东西(什么是正确的)。

我的想法不多了。提前致谢。

4

1 回答 1

1

在下面您可以返回错误消息并捕获失败的登录计数

        UPDATE  license SET

                errormessage = CASE WHEN hardwareID1 IS NOT NULL AND
                                        hardwareID2 IS NOT NULL AND
                                        hardwareID3 IS not NULL 
    and )$hwid!=hardwareID1 or $hwid!=hardwareID2 or $hwid!=hardwareID2)
    then 'errormessage' else 'allok' end,

                failedlogins = CASE WHEN hardwareID1 IS NOT NULL AND
                                        hardwareID2 IS NOT NULL AND
                                        hardwareID3 IS not NULL 
    and $hwid!=hardwareID1 and $hwid!=hardwareID2 and $hwid!=hardwareID2 
    then failedlogins+1 else failedlogins  end,

                hardwareID3 = CASE WHEN hardwareID1 IS NOT NULL AND
                                        hardwareID2 IS NOT NULL AND
                                        hardwareID3 IS NULL 
    and ($hwid!=hardwareID1 or $hwid!=hardwareID2 )

                                        THEN $hwid
                                        ELSE hardwareID3 END,
                hardwareID2 = CASE WHEN hardwareID1 IS NOT NULL AND
                                        hardwareID2 IS NULL
    and $hwid!=hardwareID1
                                        THEN $hwid
                                        ELSE hardwareID2 END,
                hardwareID1 = CASE WHEN hardwareID1 IS NULL
                                        THEN $hwid
                                        ELSE hardwareID1 END
                WHERE code = $lic AND $hwid NOT IN (COALESCE(hardwareID1,hardwareID2,hardwareID3, 0))
于 2013-09-23T14:54:57.100 回答