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
Lepaskan: 2024-11-06 13:42:02
asal
430 orang telah melayarinya

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