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

Gặp lỗi khi sử dụng hàm mysqli_escape_string

Có quá nhiều thứ sai với mã của bạn và sẽ cực kỳ khó khăn để đưa ra giải pháp bằng cách sửa những gì bạn có hiện tại.

Thứ nhất, MD5 không còn được coi là an toàn để sử dụng để lưu trữ mật khẩu.

Tham khảo ý kiến:

Thêm vào đó, bạn đang sử dụng các câu lệnh chuẩn bị không chính xác.

Như tôi đã nêu, mysqli_escape_string() hàm yêu cầu một kết nối cơ sở dữ liệu được truyền dưới dạng tham số đầu tiên:

Tự làm giúp mình và sử dụng câu trả lời này, một trong những câu trả lời của ircmaxell https://stackoverflow.com/a/29778421/

Rút ra từ câu trả lời của anh ấy:

Chỉ cần sử dụng một thư viện. Nghiêm túc. Chúng tồn tại là có lý do.

Đừng tự làm điều đó. Nếu bạn đang tạo muối của riêng mình, BẠN ĐANG LÀM SAI . Bạn nên sử dụng một thư viện xử lý điều đó cho bạn.

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);

Và khi đăng nhập:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cập nhật bảng có khóa ngoại

  2. Sự khác biệt về hiệu suất của SQL gốc (sử dụng MySQL) so với sử dụng Hibernate ORM?

  3. số mysql vào biến PHP

  4. Chèn dữ liệu đã chọn vào cơ sở dữ liệu

  5. Làm cách nào để tạo nhiều truy vấn cột WHERE IN trong trình tạo truy vấn Doctrine?