2014-11-07 2 views
0

나는 내가 무엇을 찾고 정확히 반환 phpMyAdmin을 &에서이 쿼리를 테스트 한 ... 그것은 ROW1 &가 에 제목이 중복 업데이트 복제합니다.phpmyadmin에서 작동하는 쿼리가 PHP 페이지에서 작동하지 않습니다?

$sql = "CREATE TEMPORARY TABLE tmp 
     SELECT `unit_id`, 
        `title`, 
        `status_id`, 
        `category_id`, 
        `tags`, 
        `access_id` 
     FROM  unit_genData 
     WHERE  `unit_id`='1'; 
     ALTER TABLE tmp 
     DROP COLUMN `unit_id`; 
     UPDATE  tmp 
     SET   `title` = 'DUPLICATE'; 
     INSERT INTO unit_genData 
     SELECT  0,tmp.* 
     FROM  tmp; 
     DROP TABLE tmp;"; 

그럼 난 ...

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALTER TABLE tmp DROP COLUMN unit_id ; UPDATE tmp ' at line 10

하는 이유는 무엇입니까이 오류를 가서 PHP 페이지에 추가 한?

+0

PHP 코드도 게시 중 ... 어떻게 쿼리를 실행합니까? –

+0

작은 따옴표로 테이블 이름 tmp를 둘러 보았습니까? – Fawzan

+0

이것을 '저장 프로 시저'라고 부르시겠습니까? – Edper

답변

1

은 복수 쿼리를 실행하기 위해 mysqli_multi_query()을 사용합니다.

$sql = "CREATE TEMPORARY TABLE tmp 
    SELECT `unit_id`, 
       `title`, 
       `status_id`, 
       `category_id`, 
       `tags`, 
       `access_id` 
    FROM  unit_genData 
    WHERE  `unit_id`='1'; 
    ALTER TABLE tmp 
    DROP COLUMN `unit_id`; 
    UPDATE  tmp 
    SET   `title` = 'DUPLICATE'; 
    INSERT INTO unit_genData 
    SELECT  0,tmp.* 
    FROM  tmp; 
    DROP TABLE tmp;"; 

$mysqli->multi_query($sql); 
0

기본적으로 PHP는 단일 쿼리에서 여러 명령문을 비활성화합니다.

두 문을 각각 실행하거나 mysql_multi_query을 사용할 수 있습니다.

http://php.net/manual/en/mysqli.quickstart.multiple-statement.php

(질문 사용되는 MySQL의 인터페이스를 지정하지 않습니다.) 코드가 SQL 인젝션 취약점을받는 경우, 그 문을 열 던질 수있는 쿼리에 여러 문을 가능하게하는 것이

주 사악함의 전체 보트로드 ... Ala Little Bobby Tables http://xkcd.com/327/.

0

mysql 함수를 사용하는 경우 CLIENT_MULTI_STATEMENTSmysql_connect의 5 번째 매개 변수로 전달하면 쿼리에 여러 명령문을 사용할 수 있습니다.

자세한 정보 here.

관련 문제