資料庫連線是 PHP 後端開發的核心基礎。本文提供一個簡潔的 ConnectionMySQL 類別,示範建構子自動連線、常用查詢方法封裝、以及基本 CRUD 操作,並說明建構子使用時的注意事項。
<?php
class ConnectionMySQL {
private $host = "localhost";
private $name = "root";
private $pass = "";
private $table = "phptest";
private $ut = "utf-8";
function __construct() {
$this->connect();
}
function connect() {
$link = mysql_connect($this->host, $this->name, $this->pass) or die($this->error());
mysql_select_db($this->table, $link) or die("無此資料庫:" . $this->table);
mysql_query("SET NAMES '$this->ut'");
}
function query($sql, $type = '') {
if (!($query = mysql_query($sql))) $this->show('Say:', $sql);
return $query;
}
function show($message = '', $sql = '') {
if (!$sql) echo $message;
else echo $message . '<br>' . $sql;
}
function affected_rows() { return mysql_affected_rows(); }
function result($query, $row) { return mysql_result($query, $row); }
function num_rows($query) { return @mysql_num_rows($query); }
function num_fields($query) { return mysql_num_fields($query); }
function free_result($query) { return mysql_free_result($query); }
function insert_id() { return mysql_insert_id(); }
function fetch_row($query) { return mysql_fetch_row($query); }
function version() { return mysql_get_server_info(); }
function close() { return mysql_close(); }
// 簡易 CRUD 範例
function fn_insert($table, $name, $value) {
$this->query("INSERT INTO $table ($name) VALUES ($value)");
}
function fn_delete($table, $id, $value) {
$this->query("DELETE FROM $table WHERE $id=$value");
echo "id為 $id 的記錄被成功刪除!";
}
}
?>
<?php
$db = new ConnectionMySQL();
// 新增
$db->fn_insert('test', 'id,name,sex', "'', 'hongtenzone', 'M'");
// 刪除
$db->fn_delete('test', 'id', 1);
?>
function __construct() {
$this->connect(); // 此處原碼有誤:$this->ut=$ut; 應移除或修正
}
建構子會自動呼叫 connect(),若在同一頁面多次實例化會建立多重連線,導致「MySQL server has gone away」錯誤。建議採用單例模式或依賴注入管理連線。
自 PHP 5.5 起棄用,PHP 7.0 移除。 現代專案請改用 PDO 或 mysqli,並採用預處理語句防止 SQL 注入。
<?php
class Database {
private static $instance = null;
private $pdo;
private function __construct() {
$dsn = "mysql:host=localhost;dbname=phptest;charset=utf8";
$this->pdo = new PDO($dsn, 'root', '', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
}
public static function getInstance() {
if (self::$instance === null) self::$instance = new self();
return self::$instance;
}
public function query($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
}
// 使用
$db = Database::getInstance();
$db->query("INSERT INTO test (name, sex) VALUES (?, ?)", ['hongtenzone', 'M']);
?>
雖然 mysql_* 系列函式已成為歷史,但理解其封裝邏輯有助於掌握資料庫抽象層設計。實務開發請務必使用 PDO/mysqli,並建立連線池、錯誤處理、遷移機制等完善架構。