【发布时间】: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。