PHP PDO:使用預準備語句進行安全且有效率的 MySQL 插入
準備好的語句對於使用 PDO(PHP 資料物件)在 PHP 中進行安全、高效的資料庫互動至關重要。 然而,常見的陷阱可能會導致插入失敗。讓我們來看看一個典型問題及其解決方案。
問題:不正確的方法
考慮這個看似正確的程式碼片段,試著透過準備好的語句插入 MySQL:
<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();</code>
這段程式碼雖然在語法上有效,但經常失敗。 資料庫保持不變。
解:正確的參數綁定
正確的方法是利用命名或未命名的佔位符來安全地綁定參數:
使用命名佔位符:
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ 'fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18', ]);</code>
此版本使用命名佔位符(:fname
、:sname
、:age
)和關聯陣列來綁定值。 由於其清晰性和可讀性,這是推薦的方法。
使用未命名佔位符:
或者,您可以使用未命名佔位符 (?
):
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (?, ?, ?)'); $statement->execute(['Bob', 'Desaunois', '18']);</code>
這裡,陣列中值的順序必須嚴格符合SQL語句中佔位符的順序。
為什麼有效:防止 SQL 注入並提高效能
準備好的語句有顯著的優點:
透過正確利用具有參數綁定的準備好的語句,您可以確保 PHP 應用程式中安全且最佳化的資料庫互動。
以上是為什麼我的PDO準備語句無法插入資料到MySQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!