2017-05-15 112 views
1

我想知道是否可以在PHP中全局設置和取消設置MySQL默認結果限制。當沒有設置LIMIT時,在PDO/MySQL中設置默認限制

的是什麼可能看起來像一些僞代碼:

$pdo->prepare('SELECT * FROM example'); 
$pdo->setAttribute(PDO::DEFAULT_LIMIT, 1000); // max of 1000 rows returned 
$pdo->exec(); 
$pdo->setAttribute(PDO::DEFAULT_LIMIT, 0); // no limit 

// OR 

$pdo->query('SET LIMIT_FOR_THIS_MYSQL_SESSION = 1000'); // max of 1000 rows returned 
$pdo->prepare('SELECT * FROM example'); 
$pdo->exec(); 
$pdo->query('SET LIMIT_FOR_THIS_MYSQL_SESSION = 0'); // no limit 

我不知道,如果PDO/MySQL支持這樣的事。如果沒有,是否有可能模仿這種行爲? (理想情況下沒有解析PHP中的SQL,但我會採取什麼我可以得到)

注:在實際的代碼,PDO具有這兩個連接和查詢的封裝類,這樣我就可以動態地控制發生了什麼查詢的每個部分,並且可以輕鬆訪問查詢字符串和查詢變量。


語境:

我工作的一個API,我們正在努力建立極限多少結果可以立即返回。由於有幾十個端點,因此能夠以某種方式全局設置和取消對查詢的限制將會容易得多。

由於實際代碼如何進行查詢的自定義性質,類似上面所述的內容只能在PDO包裝器(1個文件)中實現,而不必在每個端點中設置邏輯(每個其中可以由多個文件組成)動態添加一個LIMIT子句。

回答

1

您可以使用MySQL的sql_select_limit設置來配置select應該返回多少條記錄。它的值可以從配置文件中設置,動態地從會話中的代碼中設置。它的值被實際的sql語句中的任何限制子句覆蓋:

從SELECT語句返回的最大行數。 新連接的默認值是服務器允許每個表的最大行數 。典型的默認值是(232)-1或 (264)-1。如果您更改了限制,則可以通過分配DEFAULT值來恢復默認值 。

如果SELECT具有LIMIT子句,則LIMIT優先於sql_select_limit的 值。

+0

只是檢查,但會影響只有當前會議或所有會議?我假設所有? –

+1

@Nick J只有當前會話 –

+0

@RaymondNijland nope,默認情況下該設置會影響所有會話,但如果需要也可以根據會話進行調整(請參閱鏈接文檔中的範圍,這是全局性和會話) – Shadow