Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
PHP 5.5+ 棄用 ext/mysql,PHP 7.0+ 完全移除。必須遷移至 mysqli 或 PDO。
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->set_charset('utf8mb4');
$result = $mysqli->query('SELECT * FROM users');
while ($row = $result->fetch_assoc()) { /* ... */ }
$stmt = $mysqli->prepare('INSERT INTO users(name) VALUES(?)');
$stmt->bind_param('s', $name);
$stmt->execute();
$pdo = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { /* ... */ }
$stmt = $pdo->prepare('INSERT INTO users(name) VALUES(?)');
$stmt->execute([$name]);
// PHP 代碼首行
error_reporting(E_ALL & ~E_DEPRECATED);
或修改 php.ini:
error_reporting = E_ALL & ~E_DEPRECATED
display_errors = Off # 生產環境建議關閉顯示
⚠️ 僅作過渡,PHP 7+ 將直接報致命錯誤。
// compat_mysql.php
function mysql_connect($host, $user, $pass) {
static $link;
if (!$link) $link = new mysqli($host, $user, $pass);
return $link;
}
function mysql_query($sql, $link=null) {
global $mysqli;
return $mysqli->query($sql);
}
function mysql_fetch_array($result, $type=MYSQLI_BOTH) {
return $result->fetch_array($type);
}
// ... 其它常用函數映射
通过 auto_prepend_file 引入,實現零改動兼容。
| 特性 | mysql (舊) | mysqli | PDO |
|---|---|---|---|
| 預處理語句 | 不支持 | 支持 | 支持 |
| 事務控制 | 函數式 | OO/過程式 | OO |
| 多數據庫支持 | 否 | 僅 MySQL | 多種驅動 |
| 異常處理 | 無 | 可選 | 原生異常 |
| 性能 | 基準 | 略優 | 略低 |
mysql_* 調用替換utf8mb4盡早完成遷移,PDO 推薦新項目(可移植性),mysqli 推薦舊項目改造(API 相似度高)。臨時屏蔽警告僅為爭取遷移時間,不可長期依賴。