gpt4 book ai didi

PHP MySQL 负值(余额)问题

转载 作者:行者123 更新时间:2023-11-30 01:05:15 26 4
gpt4 key购买 nike

我正在开发一个桌面软件,它向用户每次执行主要操作收费。例如,每个 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

?>

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

提前致谢。最好的问候

最佳答案

我认为这是一个非常相似的问题: What is equivalent of the C# lock statement in PHP?

首先,尝试从旧的“mysql”切换到新的东西,也许是像数据库访问这样的 PDO ;)。然后,为了解决 php 中的多线程问题,为每个用户 ID (!) 编写一个文件并在有请求时锁定该文件是一个好主意。当文件在另一个线程中锁定时,等待 x 秒以让锁定线程解锁该文件。如果没有及时解锁,就会出现问题。当锁定线程一切顺利时,在每次需要的操作后解锁文件。理论上你会很擅长,直到 PHP 中出现多线程解决方案;)

关于PHP MySQL 负值(余额)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com