gpt4 book ai didi

php - PDO 会知道 mysql 是否崩溃了吗?

转载 作者:可可西里 更新时间:2023-11-01 07:37:33 25 4
gpt4 key购买 nike

如果这是一个愚蠢的问题,请原谅我,但我处境艰难。

这样做:

$query = "SELECT `av`.`UUID`, `pay`.`amount`, `pay`.`id`
FROM `2starsglobal`.`avatars` AS av
RIGHT JOIN `payments` AS `pay` ON `av`.`id` = `pay`.`avatarId`
WHERE `pay`.`payed` = 0 AND `pay`.`verificationPending` = 0
ORDER BY `pay`.`id` ASC
LIMIT 0, 14";

$stmt = $db->query($query);

echo 'SUCCESS';

$payments = "";

while($row = $stmt->fetch(PDO::FETCH_NUM))
{
$payments .= ",{$row[0]},{$row[1]},{$row[2]}";
//echo ',', $row[0],',', $row[1],',', $row[2];
$query = "UPDATE `payments` SET `verificationPending`=1 WHERE `id`={$row[2]}";
}

try
{
$db->query($query)->closeCursor();
}
catch(PDOException $e)
{
return;
}

echo $payments;

保证 php 会处理下面的情况?

我们有一个游戏支付系统,上次我们将其用于测试时,分配内存的 mysql 设置不正确,因此数据库拒绝连接并且没有按应有的方式运行查询,或者在至少其中一些。所以结果是,付款表中的已付款标志未设置,并且要一遍又一遍地付款。

现在上面的这段代码是查询和 SUCCESS 消息(用于通信)之后的代码,我的想法是如果 mysql 崩溃或失败,则不显示应该支付的款项.上面的 block 是否适用于所有情况?

希望我把自己说清楚了

编辑:上面的代码主要是为了演示而编写的,它不是正确的代码,因为我发现有点晚了。但这不应该打扰你,因为最初的问题是。如果 PDO 将处理数据库崩溃和所有其他问题。

我的想法是针对每个 Successfully updated 行,echo 那个特定的付款,而这不是上面的代码所做的。非常困惑。

更多编辑

您会注意到,我很想知道我的安全程度。 (我希望它会说明我安全或不安全的原因的状态和事实)所以在这里,我可能会保留我的代码,除非另有说明。我应该对此感到安全吗?

$query = "SELECT `av`.`UUID`, `pay`.`amount`, `pay`.`id`
FROM `2starsglobal`.`avatars` AS av
RIGHT JOIN `payments` AS `pay` ON `av`.`id` = `pay`.`avatarId`
WHERE `pay`.`payed` = 0 AND `pay`.`verificationPending` = 0
ORDER BY `pay`.`id` ASC
LIMIT 0, 14";

$stmt = $db->query($query);

$payments = $stmt->fetchAll();

$query = "UPDATE `payments` SET `verificationPending`=1 WHERE ";

foreach($payments as $payment)
{
$query .= "`id`={$payment[2]} AND ";
}

$query = substr($query, 0, strlen($query-5));

try
{
$db->beginTransaction();

$db->query($query)->closeCursor();

$db->commit();
}
catch(PDOException $e)
{
$db->rollBack();
return;
}

echo "SUCCESS";

foreach($payments as $payment)
{
echo ",{$payment[0]},{$payment[1]},{$payment[2]}";
}

最佳答案

它可能不是您正在寻找的解决方案,但您应该随时检查您的代码。在这种情况下,如果记录存在,您希望返回成功...

$query = '...';
$stmt = $db->query($query);

if($stmt === false)
// Query failed to execute

while($row = $db->fetch(PDO::FETCH_NUM))
{
...
}

$stmt = $db->query($query);
if($stmt === false)
// Update failed

$stmt->closeCursor();
// NOW you can echo

http://php.net/manual/en/pdo.query.php(PDO查询失败返回boolean false)

关于php - PDO 会知道 mysql 是否崩溃了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14254362/

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