如何用 PDO 和準備好的語句取代過時的「mysql_*」函數以實現安全的資料庫互動?

Linda Hamilton
發布: 2024-11-06 13:42:02
原創
276 人瀏覽過

How to Replace Outdated `mysql_*` Functions with PDO and Prepared Statements for Secure Database Interactions?

用PDO 和準備好的語句取代mysql_* 函數

問題:

如何取代過時的mysql_* 函數PDO 和準備好的語句來安全地儲存和檢索資料庫中的資料?

答案:

  1. 建立PDO 連線:
$hostname = '*host*';
$username = '*user*';
$password = '*pass*';
$database = '*database*';

$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
登入後複製
$username = $_POST['username'];
$email = $_POST['email'];

$stmt = $dbh->prepare("INSERT INTO `users` (username, email)
                        VALUES (?, ?)");

$stmt->bindParam(1, $username, PDO::PARAM_STR);
$stmt->bindParam(2, $email, PDO::PARAM_STR);

$stmt->execute();
登入後複製

$stmt->bindParam(1, $username, PDO::PARAM_STR, 255);
登入後複製
  1. >使用準備好的語句插入資料:
$user_id = $_GET['id'];

$stmt = $dbh->prepare("SELECT * FROM `users` WHERE `id` = ?");

$stmt->bindParam(1, $user_id, PDO::PARAM_INT);
登入後複製
  1. BindParam 的長度參數:
PDO:: PARAM_STR 不需要長度參數。但是,如果資料庫表中的欄位有最大字元數限制,則可以在PDO::PARAM_STR 之後指定它,如下所示:
  • 用於檢索資料的準備語句:
  1. 對不同資料型別使用bindParam:
PDO::PARAM_INT(整數)PDO::PARAM_BOOL(布林值)安全性:安全性:安全性:安全性:安全性: 準備好的語句消除了使用mysql_real_escape_string 等函數手動進行字串轉義的需要。 PDO 安全地處理查詢執行,防止 SQL 注入漏洞。 但是,需要注意的是僅準備好的聲明並不能保證安全。仍應實施輸入驗證和適當的清理措施。

以上是如何用 PDO 和準備好的語句取代過時的「mysql_*」函數以實現安全的資料庫互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!