2010-02-27 2 views
4

메신저간단한 삽입 phpMyAdmin과 함께 작동하지만 PHP로

INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,1,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,2,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,3,1) ; 
INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,4,1) ; 

는 mysql_query이 쿼리를 삽입하려고 그것은 반환 1064 - 당신은 당신의 SQL 구문에 오류가 있습니다; MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문을 사용하십시오. '; um_group_rights INTO INSERT (um_group_id, cms_usecase_id, um_right_id) 라인 1

에서 V는 '그것은 분명 세미콜론에 문제가있다하지만 난 이유를 이해 해달라고. 그것은 phpmyadmin에서 문제없이 작동합니다. PHP 버전은 5.2.6입니다.

+0

해당 코드 스 니펫 외에 쿼리를 호출하는 코드를 게시 할 수 있습니까? –

답변

2

PHP에서이 네 가지 쿼리를 실행하려고 할 때 mysql_query을 네 번 호출하고 있습니까? 예를 들어

는 :

mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,1,1)"); 
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,2,1)"); 
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,3,1)"); 
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,4,1)"); 


내 말은있다 : 당신이 mysql_query에 하나의 호출로, 한 번에 여러 별개의 쿼리를 보낼 수 없습니다 (인용, 강조 광산) :

mysql_query()은 고유 검색어로 (복수 쿼리는 지원되지 않음)을 현재 서버가 과 연결된 link_identifier과 연결된 데이터베이스.

검색어를 "분리"해야합니다. phpMyAdmin이 당신에게 말하지 않은 것입니다.

그리고, 코멘트에 @Alexandre pointed out 등 :

쿼리 문자열이 세미콜론으로 끝나지 않을 것이다. 당신이 당신의 데이터베이스에 액세스 할 수 mysqli_* 기능 (그리고 mysql_*)를 사용하는 경우


, 당신은 mysqli_multi_query를 사용하여 시도 할 수 있습니다.

불행히도 mysql_*과 같은 기능이 있습니다.

(BTW 다음 mysql_* API는 이전 - 그것은, 특히 새로운 프로젝트를 위해, 더 나은 것 mysqli_* 사용) 주석 이후



편집 :

네 번의 연속적인 PHP <-> MySQL 번의 호출 대신 데이터베이스에 대한 단일 호출 만 수행하면 성능이 향상 될 수 있습니다.

이 경우 한 번에 여러 줄을 삽입 할 수있는 삽입 구문을 사용해 볼 수 있습니다. (인용) MySQL의 설명서 12.2.5. INSERT Syntax를 참조하십시오 여러 행을 삽입 할 수 있습니다 VALUES 구문을 사용

INSERT 문을.
이렇게하려면 각각 개의 괄호 값 목록을 포함하고 각각은 괄호로 묶고 쉼표로 구분하십시오.
예 :

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 

각 행의 값리스트 괄호 안에 포함되어야한다.

+0

고마워, 난 그걸 몰랐어 .... 아직도 꽤 어리 석다. 나는 하나의 문자열에서 더 많은 쿼리를 더 잘 수행 할 것이지만 그 이유는 무엇일까? – x4rf41

+0

mysql_query() 문서를 인용한다 :'쿼리 문자열은 세미콜론으로 끝나야한다. ' –

+0

@Alexandre : 그것을 지적 해 주셔서 감사합니다. : 나는 그것이 무엇이든지 바뀌는지를 알지 못하고 세미콜론을 제거했다; 내 대답도 편집 해 편집 해 봤어. –

관련 문제