2014-08-28 19 views
0

執行與設置查詢我tryed執行此查詢:使用錯誤由PHP MySQL的

$q = "SET @userId := (SELECT user_id 
          FROM users 
          WHERE user_email='$userEmail' 
          AND user_token='$userToken'); 
      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 ($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我仍然有這個錯誤。我也嘗試使用:

$mysqli->multi_query ($q); 

但結果是一樣的(說實話,我也不能得到在這種情況下的錯誤信息)。

如果我刪除第一部分(變量的SET)查詢也可以通過PHP正常工作,我不能承認什麼是問題!

請幫幫我!編輯====================== ============================ 感謝@suchit,我剛剛在var名稱中看到了錯誤,但在糾正之後也是如此錯字!

我看到,如果我使用一個;在SQL語句中,PHP的工作原理與PhpMyAdmin不同,即相同的查詢可以正常工作,但如果我仍然使用mysqli_multi_query,問題仍然存在。

唯一的解決方案就是推出兩種不同的查詢@Barmar說,謝謝!

我只會添加:mysqli_multi_query的用法是什麼?!我查了一下手冊,但是我看到使用會做更多的查詢,但爲什麼不適合我?

+0

分號'AND user_token ='$ userToken');'''AND user_token ='$ userToken')' – 2014-08-28 00:28:20

+0

我認爲'owner'是他想要user_role的字符串。 – 2014-08-28 00:30:34

+0

@suchit編輯。它可能是分號,肯定是關於它的一些東西。 – 2014-08-28 00:32:13

回答

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); 

用戶定義的變量與數據庫連接,而不是特定的查詢調用相關聯,因此您可以在同一連接上在先前的電話訪問中設置的變量。

0

可能因爲你試圖一次運行兩個sql-queries(SET和SELECT)。

+2

我希望我在這裏刪除的粗魯行爲不會再發生。 – 2014-08-28 05:36:27