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.";
}
내가 여기서 뭔가를 분명 누락 확신하지만, 인터넷 검색의 몇 일이 광기에 저를 몰았다. 감사합니다 사전에!
테이블 정의를 표시 할 수 있습니까? tf_logs – Mihai
'text' 유형의'query' 컬럼이 있습니다. 왜 물어 보니? 내게 문제가 DELETE 쿼리에있는 것 같다? 전체 테이블은 값을 삽입 할 수 있는지 (즉, 연결이 작동하는지, PHP가 실행되는지, 나머지 코드 문제가 어디에 있는지를 해결할 수 있는지)를 테스트 할 수있는 간단한 방법으로 만 존재합니다. . 나는 테이블과 그것에 대한 모든 참조를 삭제하는 것보다 더 행복 할 것이다! – Tim
삭제가 완료되지 않도록하는 제약이 있습니까? –