在 PHP 中使用 SQL UPDATE return


work with SQL UPDATE return in PHP

每次用户登录时,我都会从他那里保存一个ID。为了限制程序的传播,我想允许每个用户最多拥有 3 台设备。此语句使用硬件 ID 填充数据库

.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(对于 Exampl "2")登录 2 次时,值"2"也会写入硬件 ID3 列中。

  2. 我想捕获用户是否尝试使用第 4 个 ID 登录并返回错误。可悲的是,我无法使用"真或假"ifs,因为当用户使用第一个ID登录时,我会得到"true"结果,如果他使用ID 1多次登录,我会得到false,因为该语句没有改变任何东西(什么是正确的)。

我的想法快用完了。提前谢谢。

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

        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))