我正在开发一个桌面软件,每次执行主要操作时向用户收费。例如,它表示每PDF打印将向用户收取0.1美元。
我的软件提供多线程。
所以,如果它运行单线程,它可以正常工作:)
但问题是如果用户在一个线程中运行多个线程(比如10/20线程)
它(php)也继续用户允许服务器/执行甚至平衡低于零..
虽然我的PHP脚本检查余额是否为正...
但在用户运行多个线程后,余额变为-5.95 $或-25.75 $ etc
这是一个很大的安全/财务问题......
这是我正在使用的代码:
<?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
&GT;
任何帮助/建议都将受到高度赞赏..
提前谢谢。 最好的问候答案 0 :(得分:0)
我认为,这是一个非常相似的问题: What is equivalent of the C# lock statement in PHP?
首先,尝试从旧的“mysql”切换到某些新的,可能是一些像DB访问的PDO;)。 然后,为了在php中使用多线程,可以是一个好主意,为每个用户ID(!)写一个文件并在有请求时锁定该文件。当文件被锁定在另一个线程中时,请等待x秒,以便锁定器线程解锁该文件。如果它没有在时间内解锁,则出现问题。当在锁定线程中一切顺利时,在每次需要的操作后解锁文件。 Theoraticaly你将很好,然后在PHP中有一个多线程解决方案;)