Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách nào tốt hơn để viết mã PHP để chèn dữ liệu

Không!

Ví dụ đầu tiên của bạn sử dụng hàm đã bị xóa khỏi PHP nhiều năm trước. mysql_query() không tồn tại và không nên được sử dụng nữa. Lý do tại sao nó bị loại bỏ là bạn nên sử dụng các câu lệnh chuẩn bị thay thế. Chúng được cung cấp bởi phần mở rộng mysqli hoặc PDO.

Ví dụ thứ hai của bạn là tốt hơn, nhưng nó quá lộn xộn.

  • Bạn không nên echo mysqli_query . Không có gì hữu ích khi được in ra từ chức năng này.
  • Tập thói quen sử dụng các câu lệnh chuẩn bị mọi lúc và sử dụng trình giữ chỗ cho dữ liệu biến đổi. Hiện tại, các truy vấn của bạn là không đổi, nhưng sử dụng các câu lệnh chuẩn bị sẵn vẫn là một phương pháp hay trong trường hợp bạn cần thêm một tham số sau này.
  • Tránh sử dụng các hàm như mysqli_fetch_array() . Lặp đi lặp lại từng tùy chọn kết quả một là lộn xộn và hiếm khi hữu ích.
  • Không bao giờ kiểm tra giá trị trả về của các lệnh gọi mysqli. Nó là vô nghĩa. Bật báo cáo lỗi thay thế. Xem Cách nhận thông báo lỗi trong MySQLi?
  • Luôn đặt đúng bộ ký tự. Nó phải là utf8mb4 99% thời gian.
  • Truy vấn SQL có thể được lưu trong một biến riêng biệt, nhưng vấn đề là gì? Bạn sẽ chỉ chuyển nó làm đối số cho query hàm số. Không cần sử dụng biến trung gian.
  • Không sử dụng mysqli. Bạn nên sử dụng PDO để thay thế. Nếu bạn phải sử dụng mysqli, thì hãy tạo một hàm hoặc lớp trình bao bọc đơn giản cho mục đích này và thực thi hàm chung của bạn thay vì làm rối tung các hàm mysqli.

Đây là một ví dụ về cách tôi sẽ làm điều đó. Đầu tiên, tôi kích hoạt báo cáo lỗi cho mysqli, tôi mở kết nối và đặt bộ ký tự. Sau đó, tôi khai báo một hàm nhận 3 tham số và trả về một mảng. Tham số đầu tiên là kết nối cơ sở dữ liệu của bạn mà bạn vừa mở. Thứ hai là truy vấn SQL của bạn với trình giữ chỗ nếu có. Thứ ba là tùy chọn và nó là một mảng giá trị được liên kết với trình giữ chỗ dưới dạng tham số. Hàm này hoạt động cho tất cả các loại truy vấn SQL. Phần còn lại của mã trở nên thực sự đơn giản.

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli("myserver.com", "test", "sunil7117", "test");
$link->set_charset('utf8mb4'); // always set the charset

/**
 * Executes an SQL query on the database.
 *
 * @param \mysqli $mysqli
 * @param string $query e.g. SELECT * FROM users WHERE username=?
 * @param array $params An array of parameters to be bound in the given order to the placeholders in SQL
 * @return array
 */
function prepared_query(\mysqli $mysqli, string $query, array $params = []): array {
    $stmt = $mysqli->prepare($query);
    if ($params) {
        $stmt->bind_param(str_repeat("s", count($params)), ...$params);
    }
    $stmt->execute();
    if ($result = $stmt->get_result()) {
        return $result->fetch_all(MYSQLI_BOTH);
    }
    return null;
}

prepared_query($link, "UPDATE user SET email='[email protected]' WHERE email='[email protected]' LIMIT 1");
echo "<br>";

$result = prepared_query($link, "SELECT * FROM user");
echo "welcome to database<br>";

if ($result) {
    $row = $result[0];
    echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trong khi vòng lặp PHP get_result không hoạt động

  2. MySQL:Có thể 'lấp đầy' một SELECT với các giá trị mà không có bảng không?

  3. Câu hỏi thiết kế DB về Khóa ngoại không thể xóa và chuẩn hóa

  4. Nhóm MySQL theo khoảng thời gian 24 giờ cụ thể

  5. Làm cách nào để kết nối cơ sở dữ liệu MySQL bằng Python + SQLAlchemy từ xa?