<?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();
?>
<?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() |
GRANT ALL ON db.* TO 'user'@'host')。本文提供 mysqli 與 PDO 兩種現代寫法,涵蓋連線、建庫、建表完整流程。實務開發請捨棄舊版 mysql_* 函數,採用預處理語句、utf8mb4 字元集、例外錯誤模式,構建安全可維護的資料存取層。