mysqli_multi_queryに問題があります。 私はINSERT INTO
に何回もアクセスできますが、DELETE
が含まれるとすぐにそれ以降のすべてのクエリは機能しません。興味深いことに、このクエリは、phpMyAdmin SQLボックスに貼り付けたときに正常に動作します。mysqli_multi_queryのトラブル
SET @contact_id := 1;
INSERT INTO `contacts_tags` (`contact_id`, `tag_id`)
SELECT * FROM (SELECT @contact_id, 1) AS tmp
WHERE NOT EXISTS (
SELECT `contact_id`, `tag_id` FROM `contacts_tags`
WHERE `contact_id` = @contact_id AND `tag_id` = 1
);
DELETE FROM `contacts_tags`
WHERE `contact_id`[email protected]_id AND `tag_id` NOT IN (1);
DELETE
までのすべてのクエリは、私のPHPコードから期待通りに実行されます。
ログ(次を参照)、ステップ1、@ contact_id、ステップ2a、ステップ2b、およびステップ2cのすべてのクエリを追加します。 「最後」のものはありません。 (そしてもちろん、このクエリを作成するには
INSERT INTO `tf_logs` (`query`) VALUES ('Step0');
SET @contact_id := 1;
INTO `tf_logs` (`query`) VALUES ('Step1');
INSERT INTO `contacts_tags` (`contact_id`, `tag_id`)
SELECT * FROM (SELECT @contact_id, 1) AS tmp
WHERE NOT EXISTS (
SELECT `contact_id`, `tag_id` FROM `contacts_tags`
WHERE `contact_id` = @contact_id AND `tag_id` = 1
);
INSERT INTO `tf_logs` (`query`) VALUES (@contact_id);
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2a');
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2b');
INSERT INTO `tf_logs` (`query`) VALUES ('Step 2c');
DELETE FROM `contacts_tags`
WHERE `contact_id`[email protected]_id AND `tag_id` NOT IN (1);
INSERT INTO `tf_logs` (`query`) VALUES ('Last');
。DELETE
1もしませんどちらも私はインクリメンタル以下のように、mysqli_multi_query
を使用しています。変数が含まれている正確に何を確認するには、その後、文字列に値を追加し、私は自分自身メールしました最後のクエリ。のコピーとphpMyAdminのに電子メールの内容を貼り付けるには、意図したとおりにクエリを実行します。
$queryString = "";
$queryString .= "INSERT INTO `tf_logs` (`query`) VALUES ('Step0'); ";
$queryString .= "
SET @contact_id := $contactId; ";
//...and so on
if(mysqli_multi_query($connection,$queryString)) {
echo "Success.";
$to = "[email protected]";
$subject = "SQL query";
$headers = "From: [email protected]";
mail($to,$subject,$queryString,$headers);
} else {
echo "Error.";
}
私はここに何かを明らかに欠けていると確信しているが、グーグルでの数日間は、狂気に私を推進してきました。おかげであらかじめ!
テーブル定義を表示できますか?tf_logs – Mihai
'text'タイプの' query'カラムがあります。なぜ聞くのですか?私にとっては、問題はDELETEクエリにあるようですか?テーブル全体は、値を挿入できるかどうかをテストする簡単な方法としてのみ存在します(つまり、接続が正常に動作しているかどうかを確認し、PHPが実行され、残りのコードの問題がどこで解決されているかを調べる) 。私はテーブルとそれへのすべての参照を削除するよりも幸せだろう! – Tim
削除が完了しないようにする制約がありますか? –