Tôi chỉ thấy điều này lần đầu tiên. Tôi không biết bạn có thể khởi tạo lớp MySQLI bằng cách làm điều gì đó như Show
Đây là thương hiệu mới đối với tôi ... mọi hướng dẫn tôi đã thấy trực tuyến hoặc trong sách khi kết nối với cơ sở dữ liệu thực hiện một cái gì đó như thế này:
Có một lý do tại sao hầu hết các hướng dẫn làm theo cách thủ tục? Ngay cả trong các hướng dẫn tôi đã thấy khi tạo một lớp cơ sở dữ liệu riêng biệt, hãy bảo tôi sử dụng mã kiểu thủ tục ... Sự khác biệt với MySQLI Thủ tục VS OOP là gì? Có không? Tôi có phải cài đặt bất kỳ phần mở rộng nào đó không hoặc tôi có thể bắt đầu sử dụng trong mã của mình không? Tổng số Newb ở đây, vì vậy không thực sự chắc chắn. Ngoài ra, khi nào thì nên sử dụng PDO vs MySQLI? PDO có được sử dụng phổ biến nhất bởi các nhà phát triển hoạt động trên các ứng dụng doanh nghiệp quy mô lớn không? Hoặc chỉ đơn giản là một vấn đề ưu tiên. Cảm ơn vì bất kì sự giúp đỡ... Học PHP đã nhanh chóng trở nên gây nghiện ... Tôi chỉ muốn biết nhiều hơn và nhiều hơn nữa. Khi truy cập cơ sở dữ liệu trong PHP, chúng tôi có hai lựa chọn: MySQLI và PDO. Vì vậy, những gì bạn nên biết trước khi chọn một? Sự khác biệt, hỗ trợ cơ sở dữ liệu, sự ổn định và mối quan tâm về hiệu suất sẽ được nêu trong bài viết này. Nếu bạn thường xuyên làm việc với các cơ sở dữ liệu trong PHP, bạn có thể muốn kiểm tra phạm vi các tập lệnh và ứng dụng hữu ích cho cả MySQLI và PDO trên thị trường Envato. Ứng dụng PDO trên Chợ EnvatoBản tóm tắt
MySQLI hay PDO nào tốt hơn?Ưu điểm chính của PDO so với MySQLI là trong hỗ trợ cơ sở dữ liệu. PDO hỗ trợ 12 loại cơ sở dữ liệu khác nhau, đối lập với MySQLI, chỉ hỗ trợ MySQL. Khi bạn phải chuyển đổi dự án của mình để sử dụng cơ sở dữ liệu khác, PDO sẽ làm cho quy trình đơn giản hơn. // PDO $pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); // mysqli, procedural way $mysqli = mysqli_connect('localhost','username','password','database'); // mysqli, object oriented way $mysqli = new mysqli('localhost','username','password','database'); PDO có an toàn hơn mysqli không? Hỗ trợ APICả PDO và MySQLI đều cung cấp API hướng đối tượng, nhưng MySQLI cũng cung cấp API thủ tục - giúp người mới hiểu dễ hiểu hơn. Nếu bạn quen thuộc với trình điều khiển PHP MySQL gốc, bạn sẽ thấy việc di chuyển sang giao diện MySQLI thủ tục dễ dàng hơn nhiều. Mặt khác, một khi bạn làm chủ PDO, bạn có thể sử dụng nó với bất kỳ cơ sở dữ liệu nào bạn mong muốn! Hỗ trợ cơ sở dữ liệuƯu điểm cốt lõi của PDO so với MySQLI nằm trong hỗ trợ trình điều khiển cơ sở dữ liệu của nó. Tại thời điểm viết bài này, PDO hỗ trợ 12 trình điều khiển khác nhau, trái ngược với MySQLI, chỉ hỗ trợ MySQL.PDO supports 12 different drivers, opposed to MySQLi, which supports MySQL only. Để in danh sách tất cả các trình điều khiển mà PDO hiện đang hỗ trợ, hãy sử dụng mã sau: var_dump(PDO::getAvailableDrivers()); Điều đó có nghĩa là gì? Vâng, trong các tình huống khi bạn phải chuyển dự án của mình để sử dụng cơ sở dữ liệu khác, PDO làm cho quá trình minh bạch. Vì vậy, tất cả những gì bạn sẽ phải làm là thay đổi chuỗi kết nối và một vài truy vấn - nếu họ sử dụng bất kỳ phương pháp nào không được hỗ trợ bởi cơ sở dữ liệu mới của bạn. Với MySQLI, bạn sẽ cần viết lại mọi đoạn mã - các truy vấn bao gồm. Tham số được đặt tênĐây là một tính năng quan trọng khác mà PDO có; Các tham số liên kết dễ dàng hơn đáng kể so với việc sử dụng ràng buộc số:considerably easier than using the numeric binding: $params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600); $pdo->prepare(' SELECT * FROM users WHERE username = :username AND email = :email AND last_login > :last_login'); $pdo->execute($params); ... Đối lập với cách MySQLI: $query = $mysqli->prepare(' SELECT * FROM users WHERE username = ? AND email = ? AND last_login > ?'); $query->bind_param('sss', 'test', $mail, time() - 3600); $query->execute(); Liên kết tham số đánh dấu câu hỏi có vẻ ngắn hơn, nhưng nó gần như không linh hoạt như các tham số được đặt tên, do thực tế là nhà phát triển phải luôn luôn theo dõi thứ tự tham số; Nó cảm thấy "hacky" trong một số trường hợp. Thật không may, MySQLI không hỗ trợ các tham số được đặt tên.MySQLi doesn't support named parameters. Ánh xạ đối tượngCả PDO và MySQLI đều có thể ánh xạ kết quả cho các đối tượng. Điều này có ích nếu bạn không muốn sử dụng lớp trừu tượng hóa cơ sở dữ liệu tùy chỉnh, nhưng vẫn muốn hành vi giống như ORM. Hãy tưởng tượng rằng chúng ta có một lớp 1 với một số thuộc tính, phù hợp với tên trường từ cơ sở dữ liệu.class User { public $id; public $first_name; public $last_name; public function info() { return '#'.$this->id.': '.$this->first_name.' '.$this->last_name; } } Nếu không có ánh xạ đối tượng, chúng ta sẽ cần điền vào giá trị của mỗi trường (theo cách thủ công hoặc thông qua hàm tạo) trước khi chúng ta có thể sử dụng phương thức 2 một cách chính xác.Điều này cho phép chúng tôi xác định trước các thuộc tính này trước khi đối tượng được xây dựng! Ví dụ: $query = "SELECT id, first_name, last_name FROM users"; // PDO $result = $pdo->query($query); $result->setFetchMode(PDO::FETCH_CLASS, 'User'); while ($user = $result->fetch()) { echo $user->info()."\n"; } // MySQLI, procedural way if ($result = mysqli_query($mysqli, $query)) { while ($user = mysqli_fetch_object($result, 'User')) { echo $user->info()."\n"; } } // MySQLi, object oriented way if ($result = $mysqli->query($query)) { while ($user = $result->fetch_object('User')) { echo $user->info()."\n"; } } Bảo vệ
Giả sử một hacker đang cố gắng tiêm một số SQL độc hại thông qua tham số truy vấn HTTP 'Tên người dùng' (GET): $_GET['username'] = "'; DELETE FROM users; /*" Nếu chúng ta không thoát khỏi điều này, nó sẽ được bao gồm trong truy vấn "như là" - xóa tất cả các hàng khỏi bảng 3 (cả PDO và MySQLI đều hỗ trợ nhiều truy vấn).// PDO, "manual" escaping $username = PDO::quote($_GET['username']); $pdo->query("SELECT * FROM users WHERE username = $username"); // mysqli, "manual" escaping $username = mysqli_real_escape_string($_GET['username']); $mysqli->query("SELECT * FROM users WHERE username = '$username'"); Như bạn có thể thấy, 4 không chỉ thoát khỏi chuỗi mà còn trích dẫn nó. Ở phía bên kia, 5 sẽ chỉ thoát khỏi chuỗi; Bạn sẽ cần phải áp dụng các trích dẫn bằng tay. 4 not only escapes the string, but it also quotes it. On the other side, 5 will only escape the string; you will need to apply the quotes
manually. 0
Màn biểu diễnMặc dù cả PDO và MySQLI đều khá nhanh, MySQLI thực hiện nhanh hơn đáng kể trong các điểm chuẩn - ~ 2,5% cho các báo cáo không chuẩn bị và ~ 6,5% cho các báo cáo đã chuẩn bị. Tuy nhiên, tiện ích mở rộng MySQL bản địa thậm chí còn nhanh hơn cả hai. Vì vậy, nếu bạn thực sự cần phải ép từng chút hiệu suất cuối cùng, đó là một điều bạn có thể xem xét. Bản tóm tắtCuối cùng, PDO chiến thắng trong trận chiến này một cách dễ dàng. Với sự hỗ trợ cho mười hai trình điều khiển cơ sở dữ liệu khác nhau (mười tám cơ sở dữ liệu khác nhau!) Và các tham số được đặt tên, chúng tôi có thể bỏ qua tổn thất hiệu suất nhỏ và làm quen với API của nó. Từ quan điểm bảo mật, cả hai đều an toàn miễn là nhà phát triển sử dụng chúng theo cách mà chúng được cho là sẽ được sử dụng (đọc: các câu lệnh được chuẩn bị).
Bạn có thấy bài đăng này hữu ích? Web mọi thứ; Kỹ sư IT; Kỹ sư Zend PHP5.3; Người tổ chức Debconf11; Người đam mê nguồn mở và nhà phát triển Android & Ruby Wannabe. OOP PHP có tốt hơn thủ tục không?Lập trình hướng đối tượng có một số lợi thế so với lập trình thủ tục: OOP nhanh hơn và dễ thực hiện hơn.OOP cung cấp một cấu trúc rõ ràng cho các chương trình.OOP giúp giữ cho mã PHP khô "không lặp lại bản thân" và làm cho mã dễ dàng hơn để duy trì, sửa đổi và gỡ lỗi.OOP is faster and easier to execute. OOP provides a clear structure for the programs. OOP helps to keep the PHP code DRY "Don't Repeat Yourself", and makes the code easier to maintain, modify and debug.
PDO có bị mất tích không?PDO (đối tượng dữ liệu PHP) Tuy nhiên, tiện ích mở rộng này đã bị phản đối trong năm 2012.this extension was deprecated in 2012.
MySQLI hay PDO nào tốt hơn?Ưu điểm chính của PDO so với MySQLI là trong hỗ trợ cơ sở dữ liệu.PDO hỗ trợ 12 loại cơ sở dữ liệu khác nhau, đối lập với MySQLI, chỉ hỗ trợ MySQL.Khi bạn phải chuyển đổi dự án của mình để sử dụng cơ sở dữ liệu khác, PDO sẽ làm cho quy trình đơn giản hơn.
PDO có an toàn hơn mysqli không?PDO an toàn hơn so với hai tùy chọn đầu tiên và nó cũng nhanh hơn so với thủ tục MySQLI và hướng đối tượng MySQLI.PDO là lớp truy cập cơ sở dữ liệu cung cấp giao diện nhanh và nhất quán để truy cập và quản lý cơ sở dữ liệu trong các ứng dụng PHP. and it is also faster in comparison with MySQLi procedural and MySQLi object-oriented. PDO is a database access layer that provides a fast and consistent interface for accessing and managing databases in PHP applications. |