未设置LIMIT时,在PDO / MySQL中设置默认LIMIT

时间:2017-05-15 15:49:34

标签: php mysql pdo

我试图找出是否可以在PHP中全局设置和取消设置MySQL的默认结果限制。

可能看起来像的一些伪代码:

SELECT 
    this_.ReceivedQtty as y0_,  
    framealias1_.Name as y4_,   
    stonealias5_.Name as y7_ 
FROM [InventoryItemFram] this_ 
    right outer join [Frame] framealias1_ on this_.Frame_id=framealias1_.Id 
    inner join [Warehouse] warehousea2_ on framealias1_.Whs_id=warehousea2_.Id 
    inner join [InventoryItem] itemalias3_ on this_.InventoryItem_id=itemalias3_.Id 
    inner join [InventoryItemDetails] itemdetail4_ on itemalias3_.Details_id=itemdetail4_.Id 
    inner join StoneAttribute stonealias5_ on itemdetail4_.StoneName_id=stonealias5_.Id

我不确定PDO / MySQL是否支持这样的事情。如果不是可以模仿这种行为? (理想情况下,不用PHP解析SQL,但我会采取我能得到的)

注意:在实际代码中,PDO有一个连接和查询的包装类,因此我可以动态控制查询的每个部分发生的事情,并且可以轻松访问查询字符串和查询变种。

上下文

我正在开发一个API,我们正在尝试设置一次可以返回多少结果的限制。由于存在数十个端点,因此能够以某种方式全局设置和取消设置查询限制会容易得多。

由于实际代码如何进行查询的自定义特性,上面描述的内容将只能在PDO包装器(1文件)中实现,而不必在每个端点中设置逻辑(每个端点)它可以由几个文件组成)动态添加LIMIT子句。

1 个答案:

答案 0 :(得分:1)

您可以使用MySQL的sql_select_limit设置来配置select应返回的记录数。它的值可以从配置文件中设置,动态地从会话中的代码中设置。它的值被实际sql语句中的任何limit子句覆盖:

  

从SELECT语句返回的最大行数。该   新连接的默认值是最大行数   服务器允许每个表。典型的默认值为(232)-1或   (264)-1。如果您更改了限制,则默认值可以是   通过分配DEFAULT值来恢复。

     

如果SELECT具有LIMIT子句,则LIMIT优先于   sql_select_limit的值。