2017-01-27 4 views
0

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."; 
} 

私はここに何かを明らかに欠けていると確信しているが、グーグルでの数日間は、狂気に私を推進してきました。おかげであらかじめ!

+0

テーブル定義を表示できますか?tf_logs – Mihai

+0

'text'タイプの' query'カラムがあります。なぜ聞くのですか?私にとっては、問題はDELETEクエリにあるようですか?テーブル全体は、値を挿入できるかどうかをテストする簡単な方法としてのみ存在します(つまり、接続が正常に動作しているかどうかを確認し、PHPが実行され、残りのコードの問題がどこで解決されているかを調べる) 。私はテーブルとそれへのすべての参照を削除するよりも幸せだろう! – Tim

+1

削除が完了しないようにする制約がありますか? –

答えて

0

@Chris Caviness- のおかげで、このソリューションは期待通りに簡単でした! ユーザーはINSERT特権を持っていますが、DELETE特権はありません。 固定して動作しています。