2013-08-23 4 views
5

PHP에서 TEXT 파일을 읽고 DB와 모든 테이블 및 프로 시저를 만드는 것과 같은 명령을 실행하려고합니다. 내 코드는 테이블을 생성하지만 파일에 주어진 저장 프로 시저를 생성하지 않습니다.PHP에서 PDO로 저장 프로 시저 만들기

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `add_hits`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
select hits into @hits from db_books where Book_ID = id; 
update db_books set [email protected]+1 where Book_ID = id; 
END$$ 

PDO가 SP를 생성하지 않고 어떻게이 작업을 수행 할 수 있습니까? 모든 코드 부분을 한 줄씩 실행하려고 시도했지만 아무 것도 작동하지 않습니다.
DB 설치 스크립트를 만들려고합니다. $$의 첫 번째 occurance 그렇게

DROP PROCEDURE IF EXISTS `add_hits`$$ 

그래서 내가 생각하는 DDL을 종료합니다

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `add_hits`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
    select hits into @hits from db_books where Book_ID = id; 
    update db_books set [email protected]+1 where Book_ID = id; 
END$$ 

질문을 주제 유지하고 대답하기위한 노력의 일환으로

답변

10

음, PMA는 내 자신의 질문에 대답하는 데 도움이되었습니다.

DROP PROCEDURE IF EXISTS `add_hits`; 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
declare hits_bk int; 
select hits into hits_bk from db_books where Book_ID = id; 
update db_books set hits=hits_bk+1 where Book_ID = id; 
END; 

지금 쿼리가 작동합니다 : 당신의 쿼리처럼 될 수 있도록
는 절차의 구분 부분을 제거해야이 문제를 극복하기 위해.
@Your Common Sense 및 @RiggsFolly 덕분에 도움을 받았습니다. 구분이 필요하지 그래서

1

이 있어야한다

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `add_hits`; 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
    select hits into @hits from db_books where Book_ID = id; 
    update db_books set [email protected]+1 where Book_ID = id; 
END 
$$ 
+0

지금 내 쿼리는 다음과 같습니다 이 ** DELIMITER $$ DROP PROCEDURE IF는'add_hits' 존재; CREATE DEFINER ='루트'@'localhost' 프로 시저'add_hits' (id varchar (255)에서) BEGIN 선언 hits_bk int; db_books에서 hits_bk에 대한 조회수를 선택하십시오 Book_ID = id; db_books update hits = hits_bk + 1 여기서 Book_ID = id가 업데이트되었습니다. END $$ ** 다음부터 시작하는 절차가 있습니다. __DROP PROCEDURE IF EXISTS 'add_issues_num'; __ exec 메소드를 사용하여 전체 파트를 함께 실행하고 있습니다. 하지만 여전히 작동하지 않습니다. –

4

PHP는, 당신은 일반적으로 한 번에 하나 개의 쿼리를 실행할 수 있습니다

$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
$pdo->exec('DROP PROCEDURE IF EXISTS `add_hits`'); 
$pdo->exec('CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
declare hits_bk int; 
select hits into hits_bk from db_books where Book_ID = id; 
update db_books set hits=hits_bk+1 where Book_ID = id; 
END'); 
관련 문제