使用 PHP 內建 mysqli 擴展(舊 mysql 擴展已棄用/移除)示範資料庫完整操作流程。
<?php
header("Content-Type: text/html; charset=utf-8");
// 1. 連線
$mysqli = new mysqli("localhost", "root", "aaaaaa");
if ($mysqli->connect_errno) {
die("資料庫連線失敗: " . $mysqli->connect_error);
}
$mysqli->set_charset("utf8"); // 設定連線字符集
// 2. 建立資料庫
$dbName = "phpTest";
if (!$mysqli->query("CREATE DATABASE IF NOT EXISTS `$dbName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")) {
die("建立資料庫失敗: " . $mysqli->error);
}
$mysqli->select_db($dbName);
// 3. 建立資料表
$sql = "CREATE TABLE IF NOT EXISTS `txt` (
`id` TINYINT(2) 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 COMMENT '註冊時間戳',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;";
if (!$mysqli->query($sql)) {
die("建立資料表失敗: " . $mysqli->error);
}
// 4. 插入資料(預處理語句,防 SQL 注入)
$stmt = $mysqli->prepare("INSERT INTO `txt` (username, password, email, regdate) VALUES (?, ?, ?, ?)");
$stmt->bind_param("sssi", $username, $password, $email, $regdate);
$username = "小王";
$password = "passwords"; // 實際應用請用 password_hash()
$email = "12345@163.com";
$regdate = time();
if (!$stmt->execute()) {
die("插入資料失敗: " . $stmt->error);
}
echo "插入成功,自增 ID: " . $mysqli->insert_id;
$stmt->close();
$mysqli->close();
?>
| 項目 | 建議 |
|---|---|
| 擴展選擇 | 使用 mysqli 或 PDO,勿用已移除的 mysql_* 函數。 |
| 字符集 | 連線後立即 set_charset("utf8") 或 utf8mb4;資料庫/表/欄位同步設定。 |
| 預處理語句 | 所有帶變數的 SQL 必須用 prepare() + bind_param(),防止 SQL 注入。 |
| 錯誤處理 | 檢查 connect_errno、error、execute() 返回值,記錄日誌而非直接 die()。 |
| 密碼儲存 | 絕不儲存明文,使用 password_hash() (BCRYPT) + password_verify()。 |
| 時間儲存 | 用 INT UNSIGNED 存 Unix 時間戳,或 DATETIME 存可讀時間;避免 TIMESTAMP 2038 年問題。 |
<?php
$conn = mysql_connect("localhost", "root", "aaaaaa") or die("連線失敗: " . mysql_error());
mysql_select_db("phpTest", $conn) or die("選庫失敗");
mysql_query("SET NAMES UTF8", $conn) or die("字符集設定失敗");
$sql = "CREATE TABLE txt (id TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(20), password CHAR(32), email VARCHAR(40), regdate INT(10), PRIMARY KEY (id))";
mysql_query($sql, $conn) or die("建表失敗: " . mysql_error());
$regdate = time();
$input = "INSERT INTO txt(username, password, email, regdate) VALUES ('小王', 'passwords', '12345@163.com', $regdate)";
mysql_query($input, $conn) or die("插入失敗: " . mysql_error());
?>
警告:mysql_* 函數在 PHP 5.5.0 棄用,PHP 7.0.0 完全移除,新專案嚴禁使用。