MySQLi 使用IN 運算子準備的語句
開發人員經常遇到需要使用IN 運算子查詢資料庫以基於以下條件擷取特定查詢行的情況:一組值。雖然使用準備好的語句是防止 SQL 注入的建議做法,但一些使用者報告在嘗試將準備好的語句與 IN 運算子一起使用時遇到了困難。本文深入研究了一種特定情況,即儘管資料庫中存在所需的數據,但使用準備好的語句和 IN 運算子進行資料檢索沒有傳回結果。
在提供的範例中,開發人員準備了一個語句:嘗試從「users」表中選擇行,其中「lastname」列與陣列中提供的一組值之一相符。準備過程涉及將包含逗號分隔值的字串綁定到準備好的語句。然而,即使資料庫中存在這些值,查詢也傳回了一個空結果集。
進一步調查,開發人員發現問題在於參數綁定到準備好的語句的方式。程式碼最初直接傳遞包含逗號分隔值的字串,這導致 MySQL 將整個字串視為單一值而不是一組值。
解決方案涉及將引用陣列傳遞給每個「lastnames」陣列中的值,以及指定每個值類型的字串。透過這樣做,MySQL 正確識別並單獨綁定每個值。這使得 IN 運算子能夠按預期運行,從而成功檢索所需的行。
雖然此解決方案可能不是最優雅或最簡潔的,但它有效地解決了問題並展示了正確綁定的重要性將準備好的語句與 IN 運算符一起使用時的參數。
以上是為什麼我的 MySQLi 帶有 IN 運算子的準備語句沒有回傳結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!