2017-01-27 13 views
0

mysqli_multi_query에 문제가 있습니다. 나는 INSERT INTO을 여러 번 실행할 수 있지만 DELETE을 포함하자마자 모든 후속 쿼리가 작동하지 않습니다. 흥미롭게도이 쿼리는 phpMyAdmin SQL 상자에 붙여 넣을 때 올바르게 작동합니다. 내 PHP 코드에서 예상대로 DELETE 질의에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); 

모든 쿼리 최대 실행합니다.

로그 (아래 참조), 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 하나. (가), I는 점진적으로 문자열 값을 추가 않습니다, 다음 아래와 같이 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

@ Christ Caviness 덕분에 예상대로 솔루션이 간단했습니다! 사용자에게 INSERT 권한이 있지만 DELETE 권한이 없습니다. 고정되어 있고 작동 중입니다.