【问题标题】:MySqli update is taking a while to load/timing out completely after submittingMySqli 更新在提交后需要一段时间才能完全加载/超时
【发布时间】:2022-11-02 21:44:44
【问题描述】:

我允许登录用户通过其个人资料页面上的下拉菜单更改 rsvp 状态。当他们提交更改时,更新字段需要一段时间,有时会超时。我怀疑我是用它的编码方式来进行数据库更新的,但无法弄清楚。

<?php
    include_once 'header.php';
    require_once 'includes/dbh.inc.php';
    require_once 'includes/functions.inc.php';

    if(isset($_SESSION["emailAddress"])) {
      $sql = "SELECT * FROM users WHERE email='$_SESSION[emailAddress]'";
      $stmt = mysqli_prepare($conn, $sql);
      mysqli_stmt_execute($stmt);
      $result = mysqli_stmt_get_result($stmt);
      $row = mysqli_fetch_assoc($result);
      mysqli_stmt_close($stmt);
      $inGet = "SELECT * FROM users WHERE rsvp='in';";
      $inData = mysqli_query($conn, $inGet);
      $inTotal = mysqli_num_rows($inData);
        if(isset($_POST['apply'])) {
        $rsvp = $_POST['status'];
        $email = $_SESSION['emailAddress'];
        $firstName = $row['firstName'];
        $lastName = $row['lastName'];
        do {
        $sql2 = "UPDATE users SET rsvp='$rsvp' WHERE email='$_SESSION[emailAddress]';";
        $stmt2 = mysqli_prepare($conn, $sql2);
        mysqli_stmt_execute($stmt2);
        mysqli_stmt_close($stmt2);
        } while ($inTotal <= 8);
        if (($inTotal == 9 && $rsvp == "in")) {
          $sql3 = "UPDATE users SET rsvp='waitlist' WHERE email='$_SESSION[emailAddress]';";
          $stmt3 = mysqli_prepare($conn, $sql3);  
          mysqli_stmt_execute($stmt3); 
          mysqli_stmt_close($stmt3);


        header("Location: dashboard.php");
        exit();
        }
      }
    }
?>

我试图调用和关闭语句以避免同时打开多个语句。

我希望这些更改在数据库更新时会相当迅速,以反映用户的个人资料和主仪表板。

【问题讨论】:

  • 首先应该是那个循环的重点是什么?据我所知,您在每个循环迭代中执行完全相同的 UPDATE 语句 - 相同的 $rsvp 值,相同的电子邮件地址。是什么让你认为在这里做 x 次完全相同的事情,比做一次更有意义?
  • 所以我只需要两个 if 语句来检查 rsvp 总数吗?
  • 如果您想根据您已经获得的 RSVP 数量为当前用户设置 RSVP 状态 - 那么您应该执行一个查询计数首先是那些。
  • SQL 是准备好的语句的一半。 MySQLi

标签: php mysqli


【解决方案1】:

这是一个无限循环:

do {
    $sql2 = "UPDATE users SET rsvp='$rsvp' WHERE email='$_SESSION[emailAddress]';";
    $stmt2 = mysqli_prepare($conn, $sql2);
    mysqli_stmt_execute($stmt2);
    mysqli_stmt_close($stmt2);
} while ($inTotal <= 8);

因为循环会一直持续到$inTotal &lt;= 8 不再为真。但是由于循环内没有任何改变$inTotal,如果它是真的一次那么它会总是是真的。

退后一步......为什么这首先是一个循环?您只是在重复执行相同的 SQL 语句。如果它成功了一次,那么它就成功了。删除循环并执行语句一次

$sql2 = "UPDATE users SET rsvp='$rsvp' WHERE email='$_SESSION[emailAddress]';";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_execute($stmt2);
mysqli_stmt_close($stmt2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多