準備好的 MySQL 語句提供增強的安全性和效能優勢。然而,管理可變大小的變數清單對準備好的語句提出了挑戰。
可能的解決方案 1:虛擬值和多個呼叫
一個解決方案是定義一個語句固定數量的佔位符(例如 100)。對於超過此限制的值,需要多次呼叫。然而,這種方法會降低效率並增加程式碼複雜度。
可能的解決方案2:手動建立SQL 查詢
在沒有準備好的語句的情況下建立SQL 查詢會因潛在的安全風險而引入安全風險。注入攻擊。只有實施嚴格的注入預防機制,此解決方案才可行。
改良的解決方案
考慮以下增強功能,而不是上述方法:
建立臨時表:
建立臨時表:
建立臨時表:
建立臨時表:
$dbh = new PDO($dbConnect, $dbUser, $dbPass); $parms = array(12, 45, 65, 33); $inClause = implode(',', array_fill(0, count($parms), '?')); $sql = 'SELECT age, name FROM people WHERE id IN (%s)'; $preparesql = sprintf($sql, $inClause); $st = $dbh->prepare($preparesql); $st->execute($parms);建立臨時表儲存變數清單。將值插入臨時表中,並使用臨時表作為篩選器連接所需的資料表。此方法對於較大的列表非常有效。 使用動態IN 子句:透過指定長度相等的以逗號分隔的佔位符列表來動態建構IN 子句變數清單中的值的數量。該解決方案適合較小的列表,並且更加簡潔。 範例程式碼:這些改進的解決方案提供了更大的靈活性和效率,同時確保處理時的安全性MySQL 準備好的語句中可變大小的變數列表。
以上是如何有效率地使用MySQL預編譯語句和變長參數清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!