2014-08-28 2 views
0

에 PHP에 의해 SET로 쿼리를 수행하는오류는 MySQL의

$mysqli->query ($q); 

하지만 결과는이 오류입니다 :

You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax 
to use near 'SELECT stock_name, stock_description, stocks.stock_id, 
stock_owner_id, st' at line 5 

PhpMyAdmin 또는 MySQLWorkbrench가 동일한 쿼리를 사용하려고하면 모든 작업이 정상적으로 작동합니다 ...

...하지만 PHP는 여전히 그 오류가 있습니다. 나는 또한 사용하는 tryed :

$mysqli->multi_query ($q); 

하지만 결과는 동일 (나는 또한이 경우 오류 메시지를받을 수 없습니다 솔직히). 나는 첫 번째 부분 (변수의 SET)를 삭제하면

쿼리는 PHP로도 잘 작동, 나는 probelm 무엇 undertand에 없습니다!

제발, 도와주세요!

======================= 편집 ====================== =================================================================================================================================== @ @ @ @ @ @ @ 오타!

만약 내가; SQL 문에서 PHP는 동일한 쿼리가 정상적으로 작동하는 PhpMyAdmin과 다른 점이 있지만, mysqli_multi_query를 사용하면 문제가 다시 발생합니다 ..

유일한 해결책은 두 가지 다른 쿼리를 수행하는 방법입니다. 감사합니다.

난 단지 추가합니다 : mysqli_multi_query의 사용은 무엇입니까?! 매뉴얼을 확인했지만 더 많은 쿼리를하는 것이지만, 왜 나를 위해 일하지 않았는가?

+0

세미콜론'AND user_token = '$ userToken');'-'AND user_token = '$ userToken')' –

+0

'owner'는 user_role을 위해 원하는 문자열이라고 생각합니다. –

+0

@suuchit이 (가) 편집되었습니다. 세미콜론이 될 수 있습니다. –

답변

0

mysqli::multi_query()에 대한 많은 질문을 보았습니다. 사용하지 않는 것이 좋습니다 (대부분의 경우 불필요한 것으로 보입니다). 쿼리를 두 개의 개별 호출로 분할하면됩니다. 당신이 동일한 연결에 대한 이전 호출에서 변수 설정에 액세스 할 수 있도록

$q1 = "SET @userId := (SELECT user_id 
         FROM users 
         WHERE user_email='$userEmail' 
         AND user_token='$userToken');"; 
$q2 = "SELECT stock_name, stock_description, stocks.stock_id, stock_owner_id, 
       stock_creation_date, stock_last_mod_date, stock_num_item_to_buy, 
       stock_distance_to_buy, stock_num_allowed_items, tab.user_role 
     FROM stocks 
     INNER JOIN 
      (SELECT stock_id, user_role 
       FROM user_stock 
       WHERE user_id = @userID) tab 
     ON tab.stock_id=stocks.stock_id 
     WHERE stocks.stock_id='$stockId' 
     UNION ALL 
     SELECT * , 'owner' as user_role 
     FROM stocks 
     WHERE [email protected] AND stocks.stock_id='$stockId';"; 
$mysqli->query($q1); 
$mysqli->query($q2); 

사용자 정의 변수는 데이터베이스 연결이 아닌 특정 쿼리 호출과 관련이있다. 한 번에 두 개의 SQL-쿼리를 실행 (SET과 SELECT)하기 위해 노력하고 아마 때문에

0

.

+2

여기에서 삭제 한 무례 함이 다시 발생하지 않기를 바랍니다. –