我想知道准备好的陈述是否可以按以下方式使用:
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 :(得分:0)
您准备stmt_name
但执行stmt
- 这只是一个错字吗?
categoryId
,firstName
和items_per_page
怎么样?来自哪里?
答案 1 :(得分:0)
在PHP Manual的用户评论中,来自“Brian at diamondsea”:
SQLSTATE [HY000]:常规错误:2014在其他未缓冲的查询处于活动状态时无法执行查询。 ...
花了好几个小时试图找出我们在新服务器上收到此错误的原因后,在其他服务器上运行相同的代码后,我们发现问题是运行旧的MySQL 客户端库在我们的Web服务器上,以及在数据库服务器的盒子上运行的最新版本的MySQL 服务器。
将Web服务器上的MySQL客户端升级到当前版本,问题就消失了。
答案 2 :(得分:0)
通常,PREPARE和EXECUTE语句是“客户端”操作,DBMS的“服务器端”通常不会看到这些操作。这曾经是一个严格的规则;现在,存储过程等允许动态SQL的东西变得模糊。因此,您在MySQL中尝试的可能性可能,但它看起来很可疑(至少)。
但是,鉴于您遇到问题,我建议将第二块SQL拆分为两个单独的操作 - 并省略PREPARE blurb和EXECUTE blurb。您需要将参数传递给执行拆分SQL的语句(实际上是拆分SQL的执行阶段)。