2010-01-11 51 views
0

我想知道如果準備語句可以通過以下方式來使用:MySQL中的預處理語句是否可以包含PREPARE和EXECUTE?

public static function GetCategoryItems($categoryId,$pageNum, &$rnum_pages) 
    { 
    $sql = 'SELECT DISTINCT COUNT(*) AS items_count 
       FROM item I 
       JOIN sub_category SC 
       ON I.sub_category_id = SC.sub_category_id 
       JOIN category C 
       ON C.category_id = SC.category_id 
       WHERE (I.location = 2 OR I.location = 3) 
       AND C.category_id =' . (int)$categoryId ; 
     $params = array (':category_id'=>$categoryId); 
     $rnum_pages = Catalog::CalculatePages($sql,$params); 
     $first_item = ($pageNum - 1) * ITEMS_PER_PAGE; 
      $sql = 
     "PREPARE stmt_name FROM 
     'SELECT I.item_id, I.name , I.price, I.discounted_price, I.thumbnail_photo 
     FROM item I 
     JOIN sub_category SC 
     ON I.sub_category_id = SC.sub_category_id 
     JOIN category C 
     ON C.category_id = SC.category_id 
     WHERE C.category_id = ? 
     LIMIT ?,? ' ; 

     SET @p1 = categoryId; 
     SET @p2 = firstItem; 
     SET @p3 = items_per_page; 

     EXECUTE stmt_name USING @p1,@p2,@p3; " 
     return DatabaseConnection::GetAll($sql,$params); 
     } 

其實我得到一個錯誤:

ERRNO: 256 TEXT: SQLSTATE[HY000]: General error 

誰能幫助嗎?

+0

其中'categoryId','firstItem'和'items_per_page'來自哪裏?那些應該是PHP變量? – 2010-01-11 15:33:51

+0

是否有一個特殊的原因,您爲什麼使用sql接口來準備語句,而不是某些允許使用二進制協議(例如, mysqli或pdo? – VolkerK 2010-01-11 15:57:04

+0

嗯我只是一個初學者。我只是自己嘗試和學習。我不知道什麼關於mysqli .. – chupinette 2010-01-11 16:14:47

回答

0

一般來說,準備和執行語句是「客戶端」操作的DBMS的'服務器端」通常不會看到。這曾經是一條硬性規定;事情現在被存儲過程等允許動態SQL模糊了。因此,您試圖在MySQL中嘗試,可能是可能的,但它看起來可疑(至少)。

但是,考慮到你有問題,我建議把第二塊SQL分成兩個單獨的操作 - 並省略PREPARE塊和EXECUTE塊。您將需要將參數傳遞給執行分割SQL的語句(實際上是分割SQL的執行階段)。

+0

感謝您的回覆。我會盡力去做你的建議。 :) – chupinette 2010-01-11 16:15:55

0

你準備stmt_name,但執行stmt - 這只是一個錯字?

categoryIdfirstNameitems_per_page怎麼樣 - 那些來自哪裏?

+0

事實上,我使用的存儲過程接收3個參數:CREATE PROCEDURE xyz(categoryId INT,firstItem INT,items_per_page INT)。我在使用存儲過程時遇到問題(請參閱我以前的帖子)。所以我切換到簡單的SQL語句。我不知道我是否正確使用準備好的語句。任何人都可以指導我使用它們嗎? – chupinette 2010-01-11 15:56:34

0

PHP Manual用戶評論,從「布賴恩在diamondsea」:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. ...

After spending hours trying to track down why we were getting this error on a new server, after the same code ran fine on other servers, we found the problem to be an old MySQL client library running on our web server, and a latest-version MySQL server running on the database server's box.

Upgraded the MySQL client on the web server to the current revision and the problem went away.

+0

其實錯誤是 :ERRNO:256 TEXT:SQLSTATE [HY000]:一般錯誤 LOCATION:C:\ xampp \ htdocs \ final \ classes \ database_connection.php,第81行,於2010年1月11日,7:33 pm 顯示回溯: trigger_error(「SQLSTATE [HY000]:一般錯誤」,「256」)#第81行 我沒有無緩衝查詢問題 – chupinette 2010-01-11 15:39:20

相關問題