0

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

我目前正在使用 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;

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

4

1 回答 1

-1

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

于 2012-08-08T17:17:42.197 回答