2016-09-26 6 views
1

하나의 레코드를 동일한 table1의 다른 레코드로 복사하려고합니다. mysqli_multi_query()가 성공적으로 실행되었지만 다음 코드 mysqli_query()가 실행되지 않는다.mysqli_multi_query()를 실행하면 다음 mysqli_query() 문이 실행되지 않는 이유는 무엇입니까?

코드 :

mysqli_multi_query($db,"CREATE TEMPORARY TABLE TEMP SELECT * FROM table1 WHERE id=12;UPDATE TEMP SET id=16 WHERE id_pengadu_tpgp = 12;INSERT INTO table1 SELECT * FROM TEMP WHERE id=16;UPDATE table1 SET fullname=johnny WHERE id= 16;");} mysqli_query($db,"SELECT * FROM table1 WHERE id-16"); 

희망 누구도 날이를 알아내는 데 도움 수 있습니다.

+1

'SELECT * FROM table1 WHERE id = 16'하이픈이 같지 않습니다. 그리고 난 정말 멀티 쿼리를 사용하여 중지하는 것이 좋습니다 – nogad

답변

0

만약 당신이 당신의 multi_query의 다른 중요한 구성 요소를 생략했다면 용서해주십시오. 그러나 mysqli_multi_query() 내에서 많은 쿼리 문을 간단히 짜내고 계속 진행할 수는 없습니다. 다중 쿼리 프로세스를 처리하는 데 필수적인 전체 코드 블록이 있습니다. 이 답변을 읽고 아마도 자신의 솔루션에 도달 할 수 있습니다. Strict Standards: mysqli_next_result() error with mysqli_multi_query

'클래식'IF() {DO {} WHILE} '구문'스 니펫이 잘 서비스 할 수 있으며 multi_query에 최종 SELECT를 포함 할 수 있습니다. .

* EDIT *

좋아, Varkey, 나는 이제, 거 야 완전히 숟가락 공급하면 답을 내 일반적인 제안에 대한 녹색 눈금을 획득하고 그것을 할 것입니다 있는지 확인하지 않았다. ..

나는 대시와 동등한 오타를 수정하고 작은 따옴표로 묶은 johnny을 쿼리했습니다. In MySQL, can I copy one row to insert into the same table? - 또는 Duplicate/Copy records in the same MySQL table - 또는 : 나는 당신이에서 행 중복을 달성하기 위해 미리보기를 결정한 것을 볼

CREATE TABLE IF NOT EXISTS `table1` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `id_pengadu_tpgp` int(10) NOT NULL, 
    `fullname` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ; 

INSERT INTO `table1` (`id`, `id_pengadu_tpgp`, `fullname`) VALUES 
(1, 1, 'Eddie'), 
(2, 2, 'Jeff'), 
(3, 3, 'Mike'), 
(4, 4, 'Matt'), 
(5, 5, 'Dean'), 
(6, 6, 'Robert'), 
(7, 7, 'Scott'), 
(8, 8, 'Erik'), 
(9, 9, 'Chris'), 
(10, 10, 'Ben'), 
(11, 11, 'Scott'), 
(12, 12, 'Kim'); 

:

나는 다음과 같은 제조 된 표를 사용하여 내 PHP 코드를 테스트 Mysql: Copy row but with new id
mysqli_multi_query 함수 내에서 새 행의 fullname 열과 결과 셋 SELECT를 업데이트하는 추가 쿼리가 모두 환영합니다. mysqli_multi_query()를 사용하려고한다면 같은 쿼리 일괄 처리에서 모든 것을 방해하는 문제는 보이지 않는다. 각 쿼리를 배열에 저장하고 각 쿼리에 직관적 인 키를 할당하여 프로세스를 이해하는 데 도움을 줄 수있는 자유를 얻었습니다. ("Strict Standards"링크의) 스 니펫을 약간 수정하여 SELECTed 행을 완전히 표시했습니다.

<?php 
$queries=array(
    "Create Temp Table"=>"CREATE TEMPORARY TABLE TEMP SELECT * FROM table1 WHERE id=12", 
    "Copy To Temp"=>"UPDATE TEMP SET id=16 WHERE id_pengadu_tpgp=12", 
    "Insert From Temp"=>"INSERT INTO table1 SELECT * FROM TEMP WHERE id=16", 
    "Update New Row"=>"UPDATE table1 SET fullname='johnny' WHERE id=16", 
    "Retrieve New Resultset"=>"SELECT * FROM table1 WHERE id=16" 
); 

if(mysqli_multi_query($mysqli,implode(';',$queries))){ 
    do{ 
     echo "<br><br>",key($queries),": ",current($queries); // display key:value @ pointer 
     if($result=mysqli_store_result($mysqli)){ // if a result set 
      while($rows=mysqli_fetch_assoc($result)){ 
       echo "<br>id = {$rows["id"]}"; 
       echo "<br>id_pengadu_tpgp = {$rows["id_pengadu_tpgp"]}"; 
       echo "<br>fullname = {$rows["fullname"]}"; 
      } 
      mysqli_free_result($result); 
     } 
     echo "<br>Rows = ",mysqli_affected_rows($mysqli); // acts like num_rows on SELECTs 
    } while(next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli)); 
} 
if($mysqli_error=mysqli_error($mysqli)){ 
    echo "<br><br>",key($queries),": ",current($queries),"<br>Syntax Error: $mysqli_error"; // display array pointer key:value 
} 
?> 

출력 :

Create Temp Table: CREATE TEMPORARY TABLE TEMP SELECT * FROM table1 WHERE id=12 
Rows = 1 

Copy To Temp: UPDATE TEMP SET id=16 WHERE id_pengadu_tpgp=12 
Rows = 1 

Insert From Temp: INSERT INTO table1 SELECT * FROM TEMP WHERE id=16 
Rows = 1 

Update New Row: UPDATE table1 SET fullname='johnny' WHERE id=16 
Rows = 1 

Retrieve New Resultset: SELECT * FROM table1 WHERE id=16 
id = 16 
id_pengadu_tpgp = 12 
fullname = johnny 
Rows = 1 

이것은 당신이 당신의 정확한 요구를 조정하고 오류를 찾는 데 도움을 위해 충분한 지원을해야한다

은 PHP 코드입니다. 모든 것이 제대로 작동하면 에코 또는 불필요한 코드 줄을 제거하여 제작 준비를 완료하십시오. * 쿼리에 오류가있는 경우 쿼리 체인이 중지되고 내 발췌문에 오류 메시지가 표시됩니다.

관련 문제