Fatal error: Call to undefined function mysql_connect() in ...
PHP 5.3+ 默認**不再內置** MySQL 擴展 (ext/mysql),且 PHP 7.0 **完全移除** 該擴展。舊代碼使用 mysql_connect()、mysql_query() 等函數會直接報錯。
ext/mysql 已棄用,**新項目務必使用 mysqli 或 PDO**,支持預處理語句、事務、面向對象 API、更安全。
<?php
$mysqli = new mysqli('localhost', 'root', '123456', 'testdb');
if ($mysqli->connect_errno) {
die("連接失敗: " . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$mysqli->close();
?>
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'root', '123456', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
$stmt = $pdo->query("SELECT * FROM users");
foreach ($stmt as $row) {
print_r($row);
}
} catch (PDOException $e) {
die("連接失敗: " . $e->getMessage());
}
?>
php.ini,搜索 ;extension=php_mysql.dll,去掉分號libmysql.dll 位於系統 PATH 中 (如 C:\Windows\System32 或 PHP 安裝目錄)yum install php-mysql 或 apt-get install php5-mysql./configure --with-mysql=mysqlnd ...注意:PHP 7.0+ **無法** 使用此方案,必須遷移代碼。
PHP 5.3+ 內建 mysqlnd,mysqli/PDO 可直接使用無需外部 libmysql。編譯時指定:
./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
<?php
phpinfo(); // 搜索 "mysql" 區塊
// 或命令行
php -m | grep -i mysql
// 預期輸出: mysqli, pdo_mysql, mysqlnd
?>
| 舊 mysql 函數 | mysqli 替代 | PDO 替代 |
|---|---|---|
| mysql_connect() | new mysqli() / mysqli_connect() | new PDO() |
| mysql_select_db() | $mysqli->select_db() | DSN 指定 dbname |
| mysql_query() | $mysqli->query() | $pdo->query() |
| mysql_fetch_assoc() | $result->fetch_assoc() | $stmt->fetch(PDO::FETCH_ASSOC) |
| mysql_num_rows() | $result->num_rows | $stmt->rowCount() (不精確) |
| mysql_real_escape_string() | $mysqli->real_escape_string() | $pdo->quote() / 預處理 |
| mysql_insert_id() | $mysqli->insert_id | $pdo->lastInsertId() |
| mysql_close() | $mysqli->close() | $pdo = null |
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id=?");$mysqli->set_charset('utf8mb4') 或 DSN charset=utf8mb4mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);