2012-12-25 28 views
0

可能重複:
How can you run a mysqli query with CodeIgniter?PREPARE STMT查詢不能

我有,我想從php.But運行它給我一個sql MySQL查詢語法錯誤codeigniter.When複製粘貼相同的查詢,並通過用@uid@rangee替換正確的值運行它在mysql workbench它工作正常。

這裏的查詢:

$this->db->query(" 
      SET @uid = ".mysqli_real_escape_string($conid,$userid)."; 
      SET @rangee = ".mysqli_real_escape_string($conid,$attempt)." * 50; 

      PREPARE STMT FROM 
      ' 
      UPDATE  
       notificationrecievers 
       SET notificationrecievers.status=1 
       WHERE notificationrecievers.status=0 and notificationrecievers.recieverid=? and 

       notificationrecievers.notificationid <= 
       (
        SELECT MAX(notid) FROM 
        (
         SELECT n.notid FROM user u,notifications n,notificationrecievers nr WHERE 
         nr.recieverid=? AND u.userid=n.senderid AND nr.notificationid=n.notid ORDER BY n.notid DESC 
         LIMIT 50 OFFSET ? 
        )e 
       ) 

       AND 

       notificationrecievers.notificationid >= 
       (
        SELECT min(notid) FROM 
        (
         SELECT n.notid FROM user u,notifications n,notificationrecievers nr WHERE 
         nr.recieverid=? AND u.userid=n.senderid AND nr.notificationid=n.notid ORDER BY n.notid DESC 
         LIMIT 50 OFFSET ? 
        )g 
       );'; 
      EXECUTE STMT USING @uid,@uid,@rangee,@uid,@rangee;"); 

爲什麼這是給我的錯誤?

+1

那麼,錯誤是它給你? – Amber

回答

1

首先,query()方法不打算執行多個查詢。 接下來,您的代碼允許通過$ userid變量進行注入。從這些原料預處理語句以二進制準備好的發言

更好的舉措,因爲它在手動

0

解釋真實這是完全不可能的,從你的代碼這個 - > db是什麼樣的對象$告訴。如果它是用於轉義的mysqli,則query()函數不支持多個語句。

此外,當您使用事先準備好的聲明從PHP,你應該使用PHP的包裝爲準備好的聲明中mysqli::prepare()

+0

我在'codeigniter'中使用'mysqli'。我在$ this-> db用於調用數據庫的標籤中提到了codeigniter。 – user1256956