我在foreach循环中有一个带有sql查询的php脚本,如果查询成功运行,它应该回显“成功”,但由于在循环中它多次回响“成功”,但我希望仅回显“成功”一次。我在这里看到了其他类似的线程,并且已经查看了这些线程,并尝试通过这些线程解决我的问题,但是我无法通过任何其他线程来解决此问题,因此请不要将其标记为重复。
无论如何,这是我的代码
<?php
session_start();
include('../../config/dbconf.php');
foreach($_POST['entry'] as $entryid) {
$stmt = $authconn->prepare("UPDATE account SET dp = dp - ? WHERE username = ?");
$stmt->bind_param("is", $_POST['price'], $_SESSION['classicusr']);
if($stmt->execute()) {
echo "Success";
}else{
echo "Failed";
}
}
?>
答案 0 :(得分:2)
您可以尝试这样的事情吗?
此外,无需为循环的每次迭代做准备。
<?php
session_start();
include('../../config/dbconf.php');
$bError = false;
$authconn->prepare("UPDATE account SET dp = dp - ? WHERE username = ?");
foreach($_POST['entry'] as $entryid) {
$stmt = $stmt->bind_param("is", $_POST['price'], $_SESSION['classicusr']);
try{
if(!$stmt->execute()) {
$bError = true;
// optional break and do not process further
// break;
$stmt = $stmt->errorInfo()
}
}catch (PDOException Exception){
$bError = true;
// additional erorr logging here. Could add to a delimetered string to report on later } }
echo ($bError ? 'Failure' : 'Success' );
?>
答案 1 :(得分:-1)
看到您没有对Failed语句说什么,看起来像这样可以解决问题。它只需要设置一个简单的标志即可。
<?php
session_start();
include('../../config/dbconf.php');
$feedbackGiven = FALSE;
foreach($_POST['entry'] as $entryid) {
$stmt = $authconn->prepare("UPDATE account SET dp = dp - ? WHERE username = ?");
$stmt->bind_param("is", $_POST['price'], $_SESSION['classicusr']);
if($stmt->execute()) {
if (!$feedbackGiven)
{
echo "Success";
$feedbackGiven = TRUE;
}
}else{
echo "Failed";
}
}
?>