PDO를 사용하여 DROP TABLE IF EXISTS로 시작하는 저장 프로 시저를 호출하고 있습니다. 난 무작위로 PDOException 'SQLSTATE [42S02] 받고 있어요 : 기본 테이블 또는 뷰를 찾을 수 없습니다 : 1146 테이블'historygr.reached '존재하지 않는'및 심지어 더 이상 성가신 그것을 말할 예외가 throwing 말할 것이다 테이블은 이미 동일한 연결에서 겉으로보기에는 몇 초 안에 존재합니다.DROP TABLE IF가있는 PDOException
오류를 직접 트리거 할 수는 없지만 오류 알림이 표시됩니다.
다음은 오류에 기인는 PHP의 :$dbh = PDODB::getInstance();
$stmt = $dbh->query("CALL ListReached(".$this->item_id.")"); // <-- ERROR
$items = $stmt->fetchAll();
그리고 여기 MySQL의 절차 정의입니다 :
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ListReached`(IN root INT)
BEGIN
DECLARE rows SMALLINT DEFAULT 0;
DROP TABLE IF EXISTS reached;
CREATE TABLE reached(
node_id INT PRIMARY KEY
) ENGINE=HEAP;
INSERT INTO reached VALUES (root);
SET rows = ROW_COUNT();
WHILE rows > 0 DO
INSERT IGNORE INTO reached
SELECT DISTINCT child_id
FROM related_item AS r
INNER JOIN reached AS p ON r.parent_id = p.node_id;
SET rows = ROW_COUNT();
INSERT IGNORE INTO reached
SELECT DISTINCT parent_id
FROM related_item AS r
INNER JOIN reached AS p ON r.child_id = p.node_id;
SET rows = rows + ROW_COUNT();
END WHILE;
DELETE FROM reached WHERE node_id = root;
SELECT * FROM reached;
DROP TABLE reached;
END
어떻게 프로 시저 기능을 –
그래, 당신은 것입니다 쿼리에 두 번 이상 그들을 더를 참조 할 수 있기 때문에 임시 테이블을 사용할 수 없습니다 임시 테이블 복사본을 여러 번 참조 (n-1 copy per reference)하거나 임시 테이블을 두 번 이상 참조하지 않는 쿼리를 변경해야합니다. –