MySQLi 查询在某些多个查询上失败


MySQLi Query Fails on Some Multiple Queries

>编辑:我只是通过将 INSERT 合并到一个查询中来解决它,但我仍然想知道为什么这首先失败,以防我以后再次遇到它。

我目前正在使用 mysqli 的查询命令提交多个查询,因为我不需要像multi_query允许的那样循环浏览查询结果。我没有使用多查询的主要原因是因为我在不关闭并重新打开数据库的情况下多次使用它时遇到了问题。因此,如果您有该问题的解决方案,也许它会解决这个问题。

由于我在multi_query方面的困难,我最终只使用了 query 并在其中放置了多个查询,如下所示:

$sql = "INSERT INTO customers_attributes (ForeignCustomer, Type, Content, Date)
            VALUES ($customerID, 'PhoneNumber', '$phoneNumber', NOW());
            INSERT INTO customers_attributes (ForeignCustomer, Type, Content, Date)
            VALUES ($customerID, 'Email', '$email', NOW());
            INSERT INTO customers_attributes (ForeignCustomer, Type, Content, Date)
            VALUES ($customerID, 'CanEmail', '$emailMe', NOW());
            INSERT INTO customers_attributes (ForeignCustomer, Type, Content, Date)
            VALUES ($customerID, 'CanText', '$textMe', NOW());
        ";
    $mysqli->query($sql);

现在,当我尝试使用此代码执行完全相同的概念时,上面的代码有效:

$sql = "INSERT INTO jobs_notes (ForeignJob, ForeignUser, Type, Time, Content)
        VALUES ($jobID, 0, 'IssueDescription', NOW(), '$issueDescription');
        INSERT INTO jobs_notes (ForeignJob, ForeignUser, Type, Time, Content)
        VALUES ($jobID, 0, 'UserPassword', NOW(), '$userPassword');
        ";
if($mysqli->query($sql) === TRUE)
    echo "Good";
else
    echo $mysqli->error;

它抛出有关 SQL 第三行语法的一般错误。我已经让它打印出带有变量的查询,并直接在phpMyAdmin中运行,它运行良好,所以查询很好,问题似乎在于将两个查询放在一起,即使它第一次工作。为了测试这一点,我尝试了下面的代码,它有效:

$sql = "INSERT INTO jobs_notes (ForeignJob, ForeignUser, Type, Time, Content)
        VALUES ($jobID, 0, 'IssueDescription', NOW(), '$issueDescription');
        ";
echo "
$sql
";
if($mysqli->query($sql) === TRUE)
    echo "Good";
else
    echo $mysqli->error;
$sql = "INSERT INTO jobs_notes (ForeignJob, ForeignUser, Type, Time, Content)
        VALUES ($jobID, 0, 'UserPassword', NOW(), '$userPassword');";
if($mysqli->query($sql) === TRUE)
    echo "Good";
else
    echo $mysqli->error;

如果您可以解释如何正确使用多个多查询来实现我的目的,或者告诉我为什么一个有效而另一个无效,那么任何一个都是完全可以接受的答案。

尝试mysqli_multi_query而不是mysqli_query函数。
它执行一个或多个由分号连接的查询。