MySQL and PHP
Copyright 1997-2021 the PHP Documentation Group.
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.
Example 2.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 |