Rumah >pembangunan bahagian belakang >tutorial php >Perangkap dan penyelesaian biasa kepada sambungan pangkalan data PHP: Lindungi data anda

Perangkap dan penyelesaian biasa kepada sambungan pangkalan data PHP: Lindungi data anda

WBOY
WBOYasal
2024-06-01 20:16:01887semak imbas

Perangkap biasa apabila menyambung ke pangkalan data dalam PHP termasuk: Pengesahan sambungan yang tiada Terlupa untuk menutup sambungan suntikan SQL Pengendalian ralat yang tidak betul Mengikuti amalan terbaik seperti menggunakan PDO untuk meparameterkan pertanyaan, melepaskan input pengguna dan menangkap ralat secara menyeluruh boleh menghalang perangkap ini dan Pastikan sambungan pangkalan data yang selamat dan boleh dipercayai.

Perangkap dan penyelesaian biasa kepada sambungan pangkalan data PHP: Lindungi data anda

Perangkap dan penyelesaian biasa untuk sambungan pangkalan data PHP: Lindungi data anda

Apabila mengendalikan pangkalan data dalam PHP, perangkap ada di mana-mana. Berikut ialah beberapa perangkap biasa dan amalan terbaik untuk mengelakkannya:

1 Pengesahan sambungan hilang

Tidak menggunakan skrip mysqli_connect() atau PDO yang mengesahkan sambungan secara jelas. menggunakan kaedah connect() mungkin gagal dengan ralat yang tidak dijangka. mysqli_connect()PDOconnect() 方法显式验证连接的脚本可能会因不可预见的错误而失败。

// 错误代码
if (!$conn) {
  die("连接数据库失败!");
}
// 推荐代码:使用 PDO(推荐使用 PDO)
try {
  $conn = new PDO($dsn, $username, $password);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
  die("连接数据库失败:" . $e->getMessage());
}

2. 忘记关闭连接

活动连接过多会耗尽服务器资源。始终在脚本结束时使用 mysqli_close()PDO::close()

// 错误代码
// 忘记关闭 $conn 连接
// 推荐代码
$conn->close(); // PDO
mysqli_close($conn); // mysqli

2 Lupa untuk menutup sambungan

Terlalu banyak sambungan aktif akan menghabiskan sumber pelayan. Adalah penting untuk sentiasa menutup sambungan pada penghujung skrip menggunakan mysqli_close() atau PDO::close().

// 错误代码:未转义用户输入
$sql = "SELECT * FROM users WHERE username='" . $_POST['username'] . "'";
// 推荐代码:使用 PDO 参数化查询
$sql = "SELECT * FROM users WHERE username = :username";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR);
$stmt->execute();

3. SQL Injection

SQL injection membenarkan penyerang mengeluarkan pertanyaan berniat jahat kepada pangkalan data melalui input pengguna yang tidak sah. Menggunakan pertanyaan berparameter dan melarikan diri atau mengikat input pengguna boleh menghalang jenis serangan ini dengan berkesan.

// 错误代码:忽略错误
mysqli_query($conn, "SELECT * FROM missing_table");
// 推荐代码:使用 PDO 异常处理
try {
  $stmt = $conn->query("SELECT * FROM missing_table");
} catch (PDOException $e) {
  echo "执行查询出错:" . $e->getMessage();
}

4. Pengendalian ralat yang tidak betul

Mengabaikan atau mengendalikan ralat pangkalan data secara tidak betul boleh menyebabkan skrip keluar dengan cara yang tidak dijangka. Gunakan pengendalian pengecualian atau mekanisme pelaporan ralat untuk menangkap ralat secara menyeluruh dan memberikan maklum balas yang bermakna.

// 验证连接
if (!$conn) {
  die("无法连接到数据库!");
}

// 参数化 SQL 查询
$sql = "SELECT * FROM users WHERE username = :username AND password = :password";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR);
$stmt->bindParam(':password', $_POST['password'], PDO::PARAM_STR);

// 执行查询
try {
  $stmt->execute();
} catch (PDOException $e) {
  echo "登录时出错:" . $e->getMessage();
}

// 验证结果
$result = $stmt->fetch();
if (!$result) {
  echo "登录失败!用户名或密码不正确。";
} else {
  // 成功登录...
}
rrree

Contoh Praktikal: Log Masuk Pengguna Selamat

🎜🎜Contoh kod berikut menunjukkan cara mengendalikan log masuk pengguna dengan selamat:🎜rrreee🎜Dengan mengikuti amalan terbaik ini, anda boleh mengelakkan perangkap biasa dan memastikan sambungan pangkalan data PHP anda kekal selamat dan selamat dipercayai . 🎜

Atas ialah kandungan terperinci Perangkap dan penyelesaian biasa kepada sambungan pangkalan data PHP: Lindungi data anda. 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