PHP乱序执行

标签 php mysql

我正在编写一个 PHP 脚本,但似乎遇到了乱序执行问题。我有一个 for 循环,用于检查表中是否存在记录,并在其后插入一条记录。这个想法是为了在 for 循环找到现有记录时阻止插入发生。但是,当我运行以下脚本时,我的插入语句似乎正在 for 循环期间之前执行,因为我仍然将记录插入到 reservations即使 reservedTickets 中存在应该停止执行的匹配记录。处理这个问题的最佳方法是什么?

PHP:

for ($i=1; $i<=$_POST['numTickets']; $i++)
{
    $checkTID = $_POST["tid".$i];
    if (mysql_fetch_assoc(mysql_query("SELECT EXISTS(SELECT 1 FROM reservedTickets WHERE tid=".$checkTID.") AS 'exists';"))['exists'] == 1)
    {
        header("Location: http://10.12.76.201/reservations/");
    }
}

mysql_query("INSERT INTO reservations (aid, approval) VALUES (".$_POST['aid'].", 0);");
$reservationID = mysql_insert_id(); 

最佳答案

执行发生在循环之后,因为调用 header()函数本身不会停止执行。相反,它告诉 PHP 在请求完成时附加该响应 header ,但不会阻止其下面的任何代码运行。

您应该使用以下结构之一:

for ($i=1; $i<=$_POST['numTickets']; $i++)
{
    $checkTID = $_POST["tid".$i];
    if (mysql_fetch_assoc(mysql_query("SELECT EXISTS(SELECT 1 FROM reservedTickets WHERE tid=".$checkTID.") AS 'exists';"))['exists'] == 1)
    {
        header("Location: http://10.12.76.201/reservations/");
        exit;  // STOP script execution, and send the header
    }
}

$found = false;
for ($i=1; $i<=$_POST['numTickets']; $i++)
{
    $checkTID = $_POST["tid".$i];
    if (mysql_fetch_assoc(mysql_query("SELECT EXISTS(SELECT 1 FROM reservedTickets WHERE tid=".$checkTID.") AS 'exists';"))['exists'] == 1)
    {
        $found = true;
        break; // exit the for loop
    }
}

if (!$found) {
    mysql_query("INSERT INTO reservations (aid, approval) VALUES (".$_POST['aid'].", 0);");
    $reservationID = mysql_insert_id();
}

关于PHP乱序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928332/

相关文章:

php调用matlab

php - 我需要从 php 运行 python 脚本

java - 在 Hibernate 实体中使用哪种 Java 数据类型来表示数据库中的 id 列

mysql - 帮助 MySQL 中的嵌套查询

mysql - 使用 PowerDesigner 16 生成数据库脚本时如何更改对象长度?

php - 我们如何在mysql中更新多个表

php - 如何使用时间戳对元素进行计数

PHP 和 MySQL 数据库同时搜索多个表

c# - 当前文件夹中的图像在新上传时不会被删除

php - 使我的代码异步,这样就不会永远加载