# PHP怎么擴展MySQL與MySQLi
## 引言
PHP作為最流行的服務器端腳本語言之一,與MySQL數據庫的交互是其核心功能。隨著技術發展,PHP提供了多種擴展方式連接MySQL數據庫,主要包括早期的`mysql`擴展、改進的`mysqli`擴展以及面向對象的PDO。本文將重點探討如何擴展和使用`mysql`與`mysqli`,分析它們的區別、優勢及具體實現方法。
---
## 一、MySQL擴展概述
### 1.1 什么是MySQL擴展
`mysql`是PHP早期提供的MySQL數據庫連接擴展,采用面向過程的方式操作數據庫。由于其簡單易用,在PHP5.5之前被廣泛使用。
```php
<?php
// 連接數據庫
$conn = mysql_connect("localhost", "username", "password");
mysql_select_db("database", $conn);
// 執行查詢
$result = mysql_query("SELECT * FROM users");
while ($row = mysql_fetch_array($result)) {
print_r($row);
}
// 關閉連接
mysql_close($conn);
?>
mysqli
(MySQL Improved)是mysql
的增強版,提供:
- 面向過程和面向對象兩種API
- 預處理語句支持
- 事務處理能力
- 多查詢執行功能
大多數PHP環境默認包含mysqli擴展,可通過以下方式確認:
php -m | grep mysqli
或在php.ini中取消注釋:
extension=mysqli
<?php
$conn = mysqli_connect("localhost", "user", "pass", "db");
if (mysqli_connect_errno()) {
die("連接失敗: " . mysqli_connect_error());
}
// 預處理示例
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $name, $email);
$name = "John";
$email = "john@example.com";
mysqli_stmt_execute($stmt);
mysqli_close($conn);
?>
<?php
$mysqli = new mysqli("localhost", "user", "pass", "db");
if ($mysqli->connect_errno) {
die("連接失敗: " . $mysqli->connect_error);
}
// 事務示例
$mysqli->autocommit(FALSE);
try {
$mysqli->query("UPDATE account SET balance = balance - 100 WHERE user_id = 1");
$mysqli->query("UPDATE account SET balance = balance + 100 WHERE user_id = 2");
$mysqli->commit();
} catch (Exception $e) {
$mysqli->rollback();
}
$mysqli->close();
?>
特性 | MySQL擴展 | MySQLi擴展 |
---|---|---|
PHP版本支持 | PHP4-5.6 | PHP5+ |
API風格 | 僅面向過程 | 過程+面向對象 |
預處理語句 | 不支持 | 支持 |
事務支持 | 無 | 完整支持 |
性能 | 較低 | 提升20-30% |
多語句查詢 | 不安全 | 安全實現 |
MySQL函數 | MySQLi替代方案 |
---|---|
mysql_connect() | mysqli_connect()或new mysqli() |
mysql_query() | mysqli_query()或$mysqli->query |
mysql_fetch_array() | mysqli_fetch_array() |
原mysql代碼:
$link = mysql_connect('host', 'user', 'pass');
mysql_select_db('test', $link);
$result = mysql_query('SELECT * FROM table', $link);
轉換后mysqli代碼:
$link = mysqli_connect('host', 'user', 'pass', 'test');
$result = mysqli_query($link, 'SELECT * FROM table');
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $user_id);
$mysqli->report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
連接管理使用單例模式或依賴注入
新項目優先選擇PDO(支持多種數據庫)
$mysqli = new mysqli('p:localhost', 'user', 'pass', 'db');
INSERT INTO table VALUES (1,'a'), (2,'b'), (3,'c')
unbuffered queries
處理大數據集雖然mysql
擴展已退出歷史舞臺,但理解其與mysqli
的區別對維護老項目至關重要。對于現代PHP開發,建議:
1. PHP7+環境必須使用mysqli或PDO
2. 新項目優先考慮PDO的跨數據庫特性
3. 始終遵循安全編程規范
通過合理選擇和使用數據庫擴展,可以構建更高效、更安全的PHP數據庫應用。 “`
(注:實際字數約1500字,可根據需要調整部分章節的詳細程度來控制字數)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。