将参数添加到SELECT的LIMIT子句

时间:2010-01-11 18:22:47

标签: php mysql prepared-statement

我有以下准备好的声明:

$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; "

我改为以下(没有使用准备好的声明)

$sql =

    '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 =' . (int)$categoryId;

我想在LIMIT子句中添加参数 我已经浏览了一些网站,似乎只能通过使用预准备语句在select语句中向LIMIT子句添加参数。我可以提出您的意见和建议吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

看起来您正在使用连接而不是参数来构建新的SELECT查询。如果您想继续沿着这条路前进,那么您只需附加代码:

. ' LIMIT ' . (int)$start . ', ' . (int)$number;

如果您更喜欢使用参数化查询,则需要使用PHP的内置PDOmysqli扩展,或者选择支持参数化查询的抽象层,例如{ {3}}。参数化查询通常被视为比通过字符串连接构建查询更安全,更清晰。

答案 1 :(得分:0)

  

我想在LIMIT中添加参数   条款我去过一些网站,   似乎添加参数   select语句中的LIMIT子句   只能用准备好的方法来完成   语句。

所以添加LIMIT。为什么准备好的声明只允许LIMITS?它是一个SQL结构而不是PHP结构。

答案 2 :(得分:0)

您不必使用预准备语句来使用限制。只需添加限制... 例如

$sql='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 =' . (int)$categoryId.' LIMIT '.(int)$start.','.(int)$limit;

http://dev.mysql.com/doc/refman/5.1/en/select.html