Choosing an API
PHP offers different APIs to connect to MySQL. Below we show the APIs provided by the mysqli and PDO extensions. Each code snippet creates a connection to a MySQL server running on "example.com" using the username "user" and the password "password". And a query is run to greet the user.
示例 #1 Comparing the MySQL APIs
<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);
// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
Feature comparison
The overall performance of both extensions is considered to be about the same. Although the performance of the extension contributes only a fraction of the total run time of a PHP web request. Often, the impact is as low as 0.1%.
ext/mysqli | PDO_MySQL | |
---|---|---|
PHP version introduced | 5.0 | 5.1 |
Included with PHP 7.x and 8.x | Yes | Yes |
Development status | Active | Active |
Lifecycle | Active | Active |
Recommended for new projects | Yes | Yes |
OOP Interface | Yes | Yes |
Procedural Interface | Yes | No |
API supports non-blocking, asynchronous queries with mysqlnd | Yes | No |
Persistent Connections | Yes | Yes |
API supports Charsets | Yes | Yes |
API supports server-side Prepared Statements | Yes | Yes |
API supports client-side Prepared Statements | No | Yes |
API supports Stored Procedures | Yes | Yes |
API supports Multiple Statements | Yes | Most |
API supports Transactions | Yes | Yes |
Transactions can be controlled with SQL | Yes | Yes |
Supports all MySQL 5.1+ functionality | Yes | Most |
add a note
User Contributed Notes 3 notes
alvaro at demogracia dot com ¶
10 years ago
Apart from the feature list, I suggest you try out both MySQLi and PDO and find out what API design you like most. MySQLi is more powerful and probably more complex to learn. PDO is more elegant and has the advantage that you only need to learn one PHP API if you need to work with different DBMS in the future.
rellect at gmail dot com ¶
3 years ago
Another point to consider and one of the advantages of PDO is that it's not limited to mysql and supports other database engines such as PostgreSQL, SQLite, etc.
Anonymous ¶
5 years ago
These are quite possibly the most paradoxical lines in this table:
API supports non-blocking, asynchronous queries with mysqlnd
ext/mysqli: Yes PDO_MySQL: No
API supports client-side Prepared Statements
ext/mysqli: No PDO_MySQL: Yes
Apparently it's either asynchronous I/O or the security of bound parameters.
备份地址:http://www.lvesu.com/blog/php/mysqlinfo.api.choosing.php