首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 連接 MySQL 完整實作:連線、建庫、建表與錯誤處理

     編輯:PHP 相關知識

連接 MySQL 伺服器

<?php
$host = 'localhost';
$user = 'root';
$pass = 'password';
$dbname = 'my_database';

// 推薦:使用 mysqli 物件導向風格
$mysqli = new mysqli($host, $user, $pass, $dbname);

if ($mysqli->connect_errno) {
    die("連線失敗:" . $mysqli->connect_error);
}

// 設定字元集(重要:支援 utf8mb4)
$mysqli->set_charset("utf8mb4");

echo "連線成功!";
?>

建立資料庫

<?php
$mysqli = new mysqli('localhost', 'root', 'password');
if ($mysqli->connect_errno) die("連線失敗:" . $mysqli->connect_error);

$sql = "CREATE DATABASE IF NOT EXISTS `webjx` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
if ($mysqli->query($sql) === TRUE) {
    echo "資料庫建立成功";
} else {
    echo "建立失敗:" . $mysqli->error;
}
$mysqli->close();
?>

建立資料表

<?php
$mysqli = new mysqli('localhost', 'root', 'password', 'webjx');
if ($mysqli->connect_errno) die("連線失敗:" . $mysqli->connect_error);

$sql = "CREATE TABLE IF NOT EXISTS `webjx_table` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `title` VARCHAR(255) NOT NULL DEFAULT '',
    `content` TEXT,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    INDEX `idx_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";

if ($mysqli->query($sql) === TRUE) {
    echo "資料表建立成功";
} else {
    echo "建立失敗:" . $mysqli->error;
}
$mysqli->close();
?>

PDO 替代寫法(推薦現代專案)

<?php
$dsn = "mysql:host=localhost;dbname=webjx;charset=utf8mb4";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, 'root', 'password', $options);
    echo "PDO 連線成功";
} catch (PDOException $e) {
    die("連線失敗:" . $e->getMessage());
}
?>

關鍵最佳實踐總結

項目建議做法
擴展選擇優先 PDO(支援多資料庫)、次之 mysqli
字元集統一使用 utf8mb4(含連線、資料庫、資料表)
錯誤處理PDO 啟用例外模式;mysqli 檢查 connect_errno 與 error
SQL 注入防護全程使用預處理語句,絕不拼接變數
資源釋放腳本結束自動釋放;長腳本可手動 $mysqli->close()

常見錯誤排查

  • Access denied:確認帳號密碼、主機權限(GRANT ALL ON db.* TO 'user'@'host')。
  • Unknown database:資料庫名稱拼錯或未建立。
  • Can't connect to MySQL server:檢查服務是否啟動、Port 3306 防火牆、host 設定(localhost vs 127.0.0.1 的 socket vs TCP 差異)。

總結

本文提供 mysqli 與 PDO 兩種現代寫法,涵蓋連線、建庫、建表完整流程。實務開發請捨棄舊版 mysql_* 函數,採用預處理語句、utf8mb4 字元集、例外錯誤模式,構建安全可維護的資料存取層。

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