首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP mysql_query() 函數建立 MySQL 資料庫與資料表教學 (舊版 API 歷史參考)

     編輯:MySQL 資料庫相關知識

前言

重要提醒:mysql_* 系列函數 **自 PHP 5.5.0 棄用、PHP 7.0.0 完全移除**。本文僅供維護極舊專案 (PHP 5.4 以下) 參考,**新專案嚴禁使用**,請改用 PDO 或 mysqli。

一、mysql_query() 基本語法

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+ 無法運行原生支援至最新版

八、最小遷移範例 (mysql_* → PDO)

// 舊
$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**,享受現代資料庫存取的安全與效能紅利。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved