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 の 3 行目の構文に関する一般的なエラーがスローされます。変数を使用してクエリを出力し、それを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_query関数の代わりにmysqli_multi_queryを試してください。 セミコロンで連結された 1 つまたは複数のクエリを実行します。

于 2012-08-08T17:17:42.197 に答える