Mengapa saya harus menggantikan fungsi mysql_* dengan PDO dan pernyataan yang disediakan?

Susan Sarandon
Lepaskan: 2024-11-10 21:09:03
asal
295 orang telah melayarinya

Why should I replace mysql_* functions with PDO and prepared statements?

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:

  • Keselamatan Dipertingkat: Penyataan yang disediakan menghapuskan keperluan untuk melarikan diri rentetan manual, mengurangkan risiko suntikan SQL.
  • Sintaks Lebih Mudah: PDO menawarkan sintaks yang konsisten merentas sistem pangkalan data yang berbeza, memudahkan pangkalan data pengendalian.
  • Peningkatan Prestasi: Dengan mengurangkan keperluan untuk penghuraian dan penyusunan pertanyaan berulang, PDO boleh meningkatkan prestasi dalam beberapa senario.

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;
}
Salin selepas log masuk

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();
Salin selepas log masuk

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan