首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySqli更新需要一段时间才能在提交后完全加载/超时。

问MySqli更新需要一段时间才能在提交后完全加载/超时。
EN

Stack Overflow用户
提问于 2022-11-02 13:36:51
回答 1查看 28关注 0票数 -2

我允许登录用户通过其配置文件页面上的下拉列表更改rsvp状态。当他们提交更改时,更新字段需要一段时间,有时会超时。我怀疑是我用它来进行数据库更新的方式造成了这种情况,但无法解决。

代码语言:javascript
复制
<?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();
        }
      }
    }
?>

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

我希望数据库更新过程中的更改能够立即反映用户的配置文件和主仪表板。

EN

回答 1

Stack Overflow用户

发布于 2022-11-02 13:44:44

这是一个无限循环:

代码语言:javascript
复制
do {
    $sql2 = "[your UPDATE statement...]";
    $stmt2 = mysqli_prepare($conn, $sql2);
    mysqli_stmt_execute($stmt2);
    mysqli_stmt_close($stmt2);
} while ($inTotal <= 8);

因为循环将继续,直到$inTotal <= 8不再为真为止。但是,由于循环中任何东西都不会改变$inTotal,如果它是真一次,那么总是为真。

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

代码语言:javascript
复制
$sql2 = "[your UPDATE statement...]";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_execute($stmt2);
mysqli_stmt_close($stmt2);

重要注意事项:注意到我是如何删除上面实际的UPDATE语句的。这只是为了演示删除循环后的代码结构。(并且明确地避免任何人盲目地将这个答案的内容复制/粘贴到实际代码中。)但是,您还需要在这里(以及代码中的任何其他地方)进行correct a SQL injection vulnerability:

代码语言:javascript
复制
$sql2 = "UPDATE users SET rsvp=? WHERE email=?";
$stmt2 = mysqli_prepare($conn, $sql2);
mysqli_stmt_bind_param($stmt2, 'ss', $rsvp, $_SESSION['emailAddress']);
mysqli_stmt_execute($stmt2);
mysqli_stmt_close($stmt2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74290095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档