php – PDO会不会知道mysql崩溃了?
如果这是一个愚蠢的问题,请原谅我,但我处境艰难.
做这个: $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设置不正确,所以db拒绝连接并且没有运行查询,或者至少一些他们.结果是,付款表中的付费标志没有设置,付款一次又一次. 现在这个代码块跟着查询和SUCCESS消息(用于通信),我的想法是,如果mysql崩溃或者无论如何都失败了,而不是显示应该进行的付款.上面的块是否适用于所有情况? 希望我让自己清楚明白 编辑: 我的想法是针对每个成功更新的行,以回应特定的付款,而这不是上面的代码所做的.非常混乱. 更多编辑 正如你会注意到的,我渴望得到一个关于我有多安全的答案. (我希望它有关于我安全或为什么不安全的原因和事实)所以在这里,我可能会保留作为我的代码,除非告诉其他明智的.这个我应该感到安全吗? $query = "SELECT `av`.`UUID`,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,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返回布尔值false) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |