0

我正在开发一个桌面软件,它会在每次执行主要操作时向用户收费。例如,它将向用户收取每份 PDF 打印 0.1 美元的费用。

我的软件提供多线程。.

所以,如果它运行单线程它工作正常:)

但问题是如果用户同时运行多个线程(比如 10/20 线程)

它(php)还继续用户允许服务器/执行甚至余额低于零..

虽然我的 php 脚本检查余额是否为正..

但在用户运行多个线程后,余额变为 -5.95$ 或 -25.75$ 等

这是一个很大的安全/财务问题..

这是我正在使用的代码:

<?php

$strSQL = "Select * from users where Email = '$strUser'";
$return = mysql_query($strSQL, $strDBConn);
$strDBData = mysql_fetch_array($return, MYSQL_ASSOC);
//checking balance
$strBalance = $strDBData['Balance'];
if($strBalance < 0)
{
    // if balance 0 then exit so, my software/thread will not process further
    mysql_close($strDBConn);
    exit('Balance Exceed'); 
}

//rest of the codes that realted to service executaion

// code that substract the balnce
    $dblCost = 0.25;
    $strSQL = "Update users set Balance = Balance - '$dblCost' where Email = '$strUser'";
    $return = mysql_query($strSQL, $strDBConn);

//rest finising codes 

?>

任何帮助/建议将不胜感激..

提前致谢。此致

4

1 回答 1

0

我认为,这是一个非常相似的问题: PHP 中的 C# lock 语句相当于什么?

首先,尝试从旧的“mysql”切换到新的东西,也许是一些 PDO,比如 DB 访问;)。然后,为了在 php 中使用多线程,最好每个用户标识(!)编写一个文件,并在有请求时锁定该文件。当文件在另一个线程中被锁定时,等待 x 秒以使文件被 locker-thread 解锁。如果没有及时解锁,那就是出了问题。在锁定线程中一切正常时,在每次需要操作后解锁文件。理论上你会很好,直到在 PHP 中有一个多线程解决方案;)

于 2013-11-04T07:51:35.257 回答