Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggantikan Fungsi `mysql_*` Lapuk dengan PDO dan Penyata Disediakan untuk Interaksi Pangkalan Data Selamat?

Bagaimana untuk Menggantikan Fungsi `mysql_*` Lapuk dengan PDO dan Penyata Disediakan untuk Interaksi Pangkalan Data Selamat?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 13:42:02364semak imbas

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

Menggantikan mysql_* Fungsi dengan PDO dan Penyata Disediakan

Soalan:

Bagaimana saya boleh menggantikan fungsi mysql_* yang sudah lapuk dengan PDO dan penyata yang disediakan untuk menyimpan dan mendapatkan semula data daripada pangkalan data dengan selamat?

Jawapan:

  1. Mewujudkan Sambungan PDO:
$hostname = '*host*';
$username = '*user*';
$password = '*pass*';
$database = '*database*';

$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
  1. Gunakan Penyata Disediakan untuk Memasukkan Data:
$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();
  1. Parameter Panjang untuk BindParam:

Parameter panjang tidak diperlukan untuk PDO::PARAM_STR. Walau bagaimanapun, jika anda mempunyai had aksara maksimum untuk medan dalam jadual pangkalan data anda, anda boleh menentukannya selepas PDO::PARAM_STR seperti yang ditunjukkan di bawah:

$stmt->bindParam(1, $username, PDO::PARAM_STR, 255);
  1. Pernyataan Disediakan untuk Mendapatkan Data :
$user_id = $_GET['id'];

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

$stmt->bindParam(1, $user_id, PDO::PARAM_INT);
  1. Menggunakan bindParam untuk Jenis Data Berbeza:
  • PDO::PARAM_STR untuk rentetan
  • PDO::PARAM_INT untuk integer
  • PDO::PARAM_BOOL untuk boolean
  1. 安全性:
  • Pernyataan yang disediakan menghapuskan keperluan untuk melepaskan rentetan manual dengan fungsi seperti mysql_real_escape_string.
  • PDO mengendalikan pelaksanaan pertanyaan dengan selamat, menghalang kerentanan suntikan SQL.
  • Walau bagaimanapun, penting untuk diperhatikan kenyataan yang disediakan sahaja tidak menjamin keselamatan. Pengesahan input dan langkah sanitasi yang betul masih perlu dilaksanakan.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan Fungsi `mysql_*` Lapuk dengan PDO dan Penyata Disediakan untuk Interaksi Pangkalan Data Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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