Rumah > Artikel > pangkalan data > Mengapa saya harus menggantikan fungsi mysql_* dengan PDO dan pernyataan yang disediakan?
Menggantikan mysql_* Fungsi dengan PDO dan Penyata Disediakan
Isu:
Secara tradisinya, Pembangun PHP menggunakan fungsi mysql_* untuk sambungan pangkalan data dan manipulasi data. Walau bagaimanapun, fungsi ini dianggap tidak terjamin dan terdedah kepada pelbagai serangan.
PDO dan Penyata Disediakan:
PDO (Objek Data PHP) ialah antara muka piawai untuk interaksi pangkalan data, menawarkan keselamatan dan fleksibiliti yang dipertingkatkan. Penyata yang disediakan, ciri dalam PDO, membenarkan pertanyaan berparameter, yang menghalang serangan suntikan SQL dengan berkesan.
Kelebihan Menggunakan PDO dan Penyata Disediakan:
Menyambung ke Pangkalan Data dengan PDO:
$host = 'host'; $user = 'user'; $pass = 'password'; $database = 'database'; try { $dbh = new PDO("mysql:host=$host;dbname=$database", $user, $pass); } catch (PDOException $e) { echo "Unable to connect: " . $e->getMessage(); exit; }
Menyedia dan Melaksanakan Pertanyaan dengan Penyata Disediakan:
Untuk mengambil pengguna melalui ID menggunakan pernyataan yang disediakan:
$user_id = $_GET['id']; $stmt = $dbh->prepare("SELECT * FROM `users` WHERE `id` = :user_id"); $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetchAll();
Begitu juga, untuk memasukkan data dengan pernyataan yang disediakan:
$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();
Pertimbangan Keselamatan:
Pernyataan yang disediakan menyediakan keselamatan yang wujud terhadap suntikan SQL dengan memisahkan data daripada pertanyaan. Walau bagaimanapun, adalah penting untuk mengendalikan data input dengan betul untuk mengelakkan kelemahan lain seperti skrip merentas tapak (XSS) atau pemalsuan permintaan merentas tapak (CSRF).
Atas ialah kandungan terperinci Mengapa saya harus menggantikan fungsi mysql_* dengan PDO dan pernyataan yang disediakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!