重要提醒:mysql_* 系列函數 **自 PHP 5.5.0 棄用、PHP 7.0.0 完全移除**。本文僅供維護極舊專案 (PHP 5.4 以下) 參考,**新專案嚴禁使用**,請改用 PDO 或 mysqli。
resource mysql_query ( string $query [, resource $link_identifier = NULL ] )
INSERT、UPDATE、DELETE、CREATE):成功回傳 TRUE,失敗 FALSE。SELECT、SHOW、EXPLAIN):成功回傳 **資源標識符**,失敗 FALSE。$link_identifier,嘗試使用最近一次 mysql_connect() 開啟的連線。$conn = @mysql_connect('localhost', 'root', 'root1234');
if (!$conn) {
die('連線失敗: ' . mysql_error());
}
$sql = 'CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci';
if (mysql_query($sql, $conn)) {
echo '資料庫建立成功';
} else {
echo '建立失敗: ' . mysql_error();
}
if (!mysql_select_db('testdb', $conn)) {
die('選擇資料庫失敗: ' . mysql_error());
}
$sql = "CREATE TABLE `user` (
`uid` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(20) NOT NULL DEFAULT '',
`password` CHAR(32) NOT NULL DEFAULT '',
`email` VARCHAR(40) NOT NULL DEFAULT '',
`regdate` INT(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`uid`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
if (mysql_query($sql, $conn)) {
echo '資料表建立成功';
} else {
echo '建立失敗: ' . mysql_error();
}
mysql_query("SET NAMES 'utf8'", $conn); // 設定連線字元集
$password = md5('123456'); // 不安全,僅示範
$regdate = time();
$sql = "INSERT INTO `user` (`username`, `password`, `email`, `regdate`)
VALUES ('小王', '$password', '12345@163.com', $regdate)";
if (mysql_query($sql, $conn)) {
echo '資料新增成功';
} else {
echo '新增失敗: ' . mysql_error();
}
mysql_query("SET CHARACTER SET 'utf8'", $conn);
$sql = 'SELECT * FROM `user`';
$result = mysql_query($sql, $conn);
if (!$result) {
die('查詢失敗: ' . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) {
echo "用戶名: {$row['username']}
";
echo "郵件: {$row['email']}
";
echo "註冊時間: " . date('Y-m-d', $row['regdate']) . "
";
}
mysql_free_result($result); // 釋放資源
| 缺陷 | 風險 | PDO/mysqli 解決 |
|---|---|---|
| 無預處理語句 | SQL 注入極高風險 | prepare() + 參數綁定 |
| 無異常模式 | 錯誤處理散亂、易遺漏 | PDO::ERRMODE_EXCEPTION |
| 無多資料庫支援 | 遷移困難 | PDO 抽象層 |
| 連線資源非物件 | 難以封裝、單元測試 | PDO/Mysqli 物件導向 |
| 已從核心移除 | PHP 7+ 無法運行 | 原生支援至最新版 |
// 舊
$conn = mysql_connect('localhost', 'root', 'pass');
mysql_select_db('db', $conn);
$res = mysql_query("SELECT * FROM user WHERE id = {$_GET['id']}", $conn);
while ($row = mysql_fetch_assoc($res)) { ... }
// 新 (PDO)
$pdo = new PDO('mysql:host=localhost;dbname=db;charset=utf8mb4', 'root', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
$stmt = $pdo->prepare('SELECT * FROM user WHERE id = ?');
$stmt->execute([$_GET['id']]);
while ($row = $stmt->fetch()) { ... }
結語:mysql_query() 是 PHP 早期歷史產物,已完成歷史使命。維護舊專案時請加註 @deprecated、制定遷移計畫;新專案**直接使用 PDO**,享受現代資料庫存取的安全與效能紅利。