Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?

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 which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?
Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?
Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?
Ứng dụng PDO trên Chợ Envato

Bản tóm tắt

PDO Mysqli
Hỗ trợ cơ sở dữ liệu 12 trình điều khiển khác nhauMySQL chỉ
API OOPOOP + Thủ tục
Sự liên quan DễDễ
Tham số được đặt tên ĐúngKhông
Ánh xạ đối tượng ĐúngĐúng
Không
(client side)
ĐúngKhông
Ánh xạ đối tượng Báo cáo chuẩn bị (phía khách hàng)Báo cáo chuẩn bị (phía khách hàng)
Màn biểu diễn ĐúngĐúng

Sự liên quan

Dễ

// 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');

Tham số được đặt tên


Đúng

Không


Ánh xạ đối tượng

Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?
Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?
Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?

Báo cáo chuẩn bị (phía khách hàng)PDO supports 12 different drivers, opposed to MySQLi, which supports MySQL only.

Màn biểu diễn

var_dump(PDO::getAvailableDrivers());

Nhanh


Thủ tục lưu trữ

Đó là một cinch để kết nối với cơ sở dữ liệu với cả hai điều này: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);

Xin lưu ý rằng các đối tượng / tài nguyên kết nối này sẽ được coi là tồn tại thông qua phần còn lại của hướng dẫn này.

$query = $mysqli->prepare('
	SELECT * FROM users
	WHERE username = ?
	AND email = ?
	AND last_login > ?');
	
$query->bind_param('sss', 'test', $mail, time() - 3600);
$query->execute();

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!MySQLi doesn't support named parameters.


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.

class User {
	public $id;
	public $first_name;
	public $last_name;
	
	public function info()
	{
		return '#'.$this->id.': '.$this->first_name.' '.$this->last_name;
	}
}

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

Đ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.

$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";
	}
}

Tham số được đặt tên

Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?
Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?
Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?

Đâ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ố:SQL injection security, as long as the developer uses them the way they were intended (read: escaping / parameter binding with prepared statements).

... Đối lập với cách MySQLI:

$_GET['username'] = "'; DELETE FROM users; /*"

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.

// 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'");

Thật không may, MySQLI không hỗ trợ các tham số được đặt tên.

var_dump(PDO::getAvailableDrivers());
2 not only escapes the string, but it also quotes it. On the other side,
var_dump(PDO::getAvailableDrivers());
3 will only escape the string; you will need to apply the quotes manually.

// PDO, prepared statement
$pdo->prepare('SELECT * FROM users WHERE username = :username');
$pdo->execute(array(':username' => $_GET['username']));

// mysqli, prepared statements
$query = $mysqli->prepare('SELECT * FROM users WHERE username = ?');
$query->bind_param('s', $_GET['username']);
$query->execute();

Ánh xạ đối tượng


Ánh xạ đối tượng

Báo cáo chuẩn bị (phía khách hàng)


Bản tóm tắt

Màn biểu diễn

Nhanh

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

Hướng dẫn which is faster pdo or mysqli? - cái nào nhanh hơn pdo hay mysqli?

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.

PDO có chậm hơn mysqli không?

3. Ở đây bạn có thể thấy rằng PDO chỉ nhanh hơn 1% so với MySQLI.PDO is only 1% faster than mysqli.

Mysqli có nhanh hơn mysql không?

Quá trình cài đặt với MySQLI không chỉ dễ dàng mà còn tự động khi gói MySQL PHP5 được cài đặt trong Windows hoặc Linux.MySQLI thực hiện (một chút) nhanh hơn so với đối thủ cạnh tranh của nó.Với các báo cáo không chuẩn bị, hệ thống thực hiện nhanh hơn ~ 2,5% và nhanh hơn ~ 6,5% với các câu được chuẩn bị.MySQLi performs (slightly) faster than its competition. With non-prepared statements, the system performs ~2.5% faster, and ~6.5% faster with prepared ones.

Tôi nên học mysqli hay pdo?

Ý kiến của tôi là PDO nên được sử dụng theo mặc định, đặc biệt là người mới bắt đầu, do tính linh hoạt, khả năng dự đoán chung và các chế độ tìm nạp hữu ích.Tuy nhiên, MySQLI sẽ là lựa chọn tốt hơn cho những người dùng nâng cao muốn chức năng mới nhất, cụ thể của MySQL.PDO should be used by default, especially beginners, due to its versatility, general predictability and useful fetch modes. However, MySQLi would be a better choice for advanced users who want the newest, MySQL-specific functionality.

PDO có an toàn hơn mysqli không?

Không có sự khác biệt về bảo mật.Sự khác biệt chính giữa PDO và MySQLI là PDO hỗ trợ các cơ sở dữ liệu khác nhau và MySQLI chỉ hỗ trợ MySQL.MySQLI cũng nhanh hơn một chút.PDO hỗ trợ 12 trình điều khiển khác nhau, trái ngược với MySQLI, chỉ hỗ trợ MySQL.. The main difference between PDO and Mysqli is that PDO supports various databases and mysqli supports only MySQL. MySQLi is also a bit faster. PDO supports 12 different drivers, opposed to MySQLi, which supports MySQL only.