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

Cách kiểm tra xem tên người dùng đã tồn tại với PHP / MYSQL hay chưa

Tham khảo MYSQLI: http://php.net/manual/en/mysqli.query. php

Tham khảo PDO: http://php.net/manual/en/book.pdo. php

Hầu hết các lập trình viên PHP đã khám phá ra cách sử dụng các phần mở rộng MySQLi và MySQL. Tuy nhiên, Đối tượng dữ liệu PHP (PDO) cung cấp các cách để làm việc với các đối tượng và truy xuất các câu lệnh đã chuẩn bị sẵn để làm cho công việc dễ dàng hơn nhiều.

PDO là một công cụ truy cập cơ sở dữ liệu trong PHP cho phép truy cập thống nhất trên nhiều cơ sở dữ liệu. Nó không hỗ trợ cú pháp cụ thể cho cơ sở dữ liệu, nhưng nó cho phép chuyển đổi tương đối liền mạch giữa các nền tảng và cơ sở dữ liệu khác nhau, có thể thực hiện đơn giản bằng cách thay đổi chuỗi kết nối.

Dưới đây là một ít thông tin về PDO, chủ yếu hướng đến các lập trình viên vẫn đang sử dụng các phần mở rộng MySQL và MySQLi, phác thảo tính ưu việt của phần mở rộng trước đây. Các khía cạnh khác nhau sẽ được nghiên cứu trong vài đoạn tiếp theo.

  • Hỗ trợ cơ sở dữ liệu

Phần mở rộng PDO có khả năng truy cập bất kỳ cơ sở dữ liệu nào mà trình điều khiển PDO đã được viết cho. Có nhiều trình điều khiển PDO có sẵn, một vài trong số đó bao gồm trình điều khiển PDO dùng để truy cập các cơ sở dữ liệu Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird / Interbase 6, Giao diện cuộc gọi Oracle và PostgreSQL, trong số nhiều cơ sở dữ liệu khác.

Các trình điều khiển không tự động có sẵn trong mọi hệ thống, vì vậy bạn sẽ phải tìm các trình điều khiển có sẵn của mình và thêm những trình điều khiển bạn cần.

  • Kết nối cơ sở dữ liệu

Có các cú pháp khác nhau để thiết lập các kết nối cơ sở dữ liệu phụ thuộc vào cơ sở dữ liệu cụ thể. Khi sử dụng PDO, bạn muốn đảm bảo rằng các hoạt động của mình được bao bọc trong các khối try / catch và bạn sử dụng kỹ thuật ngoại lệ.

Trong trường hợp bình thường, chỉ cần một kết nối duy nhất và các kết nối được đóng lại bằng cách lập trình xử lý cơ sở dữ liệu dưới dạng null. Bạn có thể tra cứu các tùy chọn và cú pháp cụ thể hơn trong các trang web tài nguyên khác nhau.

  • Xử lý lỗi

PDO cho phép sử dụng các ngoại lệ để xử lý lỗi, đó là lý do tại sao bạn nên bọc PDO trong các khối thử / bắt. Bằng cách này, PDO có thể bị buộc vào thuộc tính chế độ lỗi liên quan để tạo ra một ngoại lệ.

Có ba chế độ - im lặng (mặc định), cảnh báo và ngoại lệ -. Hai cái sau hữu ích hơn trong lập trình DRY. Chế độ lỗi "Cảnh báo" hữu ích cho việc gỡ lỗi và chế độ "ngoại lệ" cho phép xử lý lỗi một cách dễ dàng trong khi ẩn dữ liệu mà một người có thể sử dụng để khai thác hệ thống của bạn.

  • Phụ trang và Cập nhật

PDO cô đọng các thao tác chèn và cập nhật cơ sở dữ liệu phổ biến thành một quy trình hai bước đơn giản:Prepare >> [Bind] >> Execute . Với phương pháp này, bạn có thể tận dụng tối đa các câu lệnh được chuẩn bị sẵn của PDO, những câu lệnh này cung cấp khả năng bảo vệ bạn khỏi các cuộc tấn công độc hại thông qua việc đưa vào SQL.

Các câu lệnh chuẩn bị sẵn là các câu lệnh SQL được tuân thủ trước có thể được thực thi nhiều lần bằng cách gửi dữ liệu này đến máy chủ. Chúng có lợi ở chỗ dữ liệu được sử dụng trong trình giữ chỗ được bảo vệ tự động khỏi các cuộc tấn công đưa vào SQL.

Mã PDO để kiểm tra xem các trường tên người dùng và mật khẩu có tồn tại trong DB hay không:

 <?php
//Connections
try {
    $handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
    $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
    exit($e->getMessage());
}

$name = $_POST['name']; 
$username = $_POST['username']; 
$email = $_POST['email'];   
$password = $_POST['password']; 
$password1 = $_POST['passwordconf'];
$ip = $_SERVER['REMOTE_ADDR'];


//Verifcation 
if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)){
    $error = "Complete all fields";
}

// Password match
if ($password != $password1){
    $error = "Passwords do not match";
}

// Email validation

if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
    $error = "Enter a Valid email";
}

// Password length
if (strlen($password) <= 6){
    $error = "Choose a password longer then 6 character";
}

if(!isset($error)){
//no error
$sthandler = $handler->prepare("SELECT username FROM users WHERE username = :name");
$sthandler->bindParam(':name', $username);
$sthandler->execute();

if($sthandler->rowCount() > 0){
    echo "User Already Exists.";
} else {
    //Securly insert into database
    $sql = 'INSERT INTO users (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)';    
    $query = $handler->prepare($sql);

    $query->execute(array(

    ':name' => $name,
    ':username' => $username,
    ':email' => $email,
    ':password' => $password,
    ':ip' => $ip

    ));
    }
}else{
    echo "error occured: ".$error;
    exit();
}

Hy vọng vì vậy tài liệu tham khảo này có thể hữu ích cho bạn để tự phát triển các mã trong dự án tương lai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập giới hạn kích thước tệp trong PHPMyAdmin

  2. Lỗi nghiêm trọng:Không có ngoại lệ 'mysqli_sql_exception' với thông báo 'Không có chỉ mục nào được sử dụng trong truy vấn / câu lệnh chuẩn bị'

  3. Làm cách nào để bạn ngăn chặn việc đưa SQL vào các ứng dụng LAMP?

  4. Symfony3 - SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục nào như vậy

  5. Cách chọn số lượng giá trị được nhóm theo phạm vi