使用PHP 在MySQL 中準備可變大小變數列表的語句
許多資料庫操作需要能夠使用可變數量的參數進行查詢。例如,在人員資料庫中,查詢可能會選擇 ID 位於特定清單中的記錄。但是,清單中的 ID 數量可能會有所不同。
此問題有多種可能的解決方案。
解 1:虛擬值
一種方法涉及建立一個接受固定數量變數的語句,並用保證不在表中的虛擬值填入其餘變數。但是,對於具有大量虛擬值的列表,此策略可能效率較低。
解決方案2:建立動態查詢
另一種選擇是避免使用準備好的語句和相反,動態構建查詢字串,仔細檢查可能的注入攻擊。這種方法需要保持警惕,以確保結果查詢是安全的且不會被利用。
高效解決方案
為了更有效地處理可變大小的變數清單:
使用臨時表的解:
建立一個臨時表,插入每個ID,然後在查詢中執行聯結。
動態語句準備的解決方案:
使用sprintf 函數動態建立一個具有適當數量佔位符的準備好的語句,然後使用提供的參數執行它:
$dbh=new PDO($dbConnect, $dbUser, $dbPass); $parms=array(12, 45, 65, 33); $st=$dbh->prepare(sprintf( 'SELECT age, name FROM people WHERE id IN (%s)', implode(',',array_fill(0,count($parms),'?')) )); $st->execute($parms);
此技術提供了準備好的語句的效率,同時容納可變數量的參數。臨時表和動態語句準備方案的選擇取決於清單的大小,後者更適合較小的清單。
以上是如何在 PHP 中使用 MySQL 中的預先準備語句來執行具有可變大小的 ID 清單的查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!