Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo

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ư

new mysqli( $host, $username, $password, $db );

Đâ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:

$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}

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.

Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo
Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo
Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo
Ứng dụng PDO trên Chợ Envato

Bản tóm tắt

Cuố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ị). Vì vậy, nếu bạn vẫn đang làm việc với MySQLI, có lẽ đã đến lúc thay đổi!
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. 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.
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.Ư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.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. 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.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.
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.
(client side)
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.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.
Màn biểu diễn Mặ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. Mặ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ắt 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.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.

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ợ API

Cả 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

Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo
Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo
Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo

Ư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ượng

Cả 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

$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
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

$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
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ệ

Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo
Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo
Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo

Cả hai thư viện đều cung cấp bảo mật tiêm SQL, miễn là nhà phát triển sử dụng chúng theo cách chúng được dự định (đọc: thoát / liên kết tham số với các câu lệnh đã chuẩn bị).SQL injection security, as long as the developer uses them the way they were intended (read: escaping / parameter binding with prepared statements).

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

$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
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,

$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
4 không chỉ thoát khỏi chuỗi mà còn trích dẫn nó. Ở phía bên kia,
$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
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.
$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
4 not only escapes the string, but it also quotes it.
On the other side,
$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
5 will only escape the string; you will need to apply the quotes manually.

$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
0

Tôi khuyên bạn nên luôn sử dụng các câu lệnh đã chuẩn bị với các truy vấn ràng buộc thay vì P

$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
6 và
$conn = mysqli_connect( $host, $username, $password, $db );

if ( !$conn ) {
    die( 'Sorry, could not connect');
}
5.


Màn biểu diễn

Mặ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ắt

Cuố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ị).

Vì vậy, nếu bạn vẫn đang làm việc với MySQLI, có lẽ đã đến lúc thay đổi!

Bạn có thấy bài đăng này hữu ích?

Hướng dẫn php procedural vs oop vs pdo - php thủ tục vs oop vs pdo

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.