mysqli
及 pdo
兩種方式
mysqli
僅支援MySQL,但其語法和早期的 mysql 系列函數很像,所以,適合舊系統轉換,或者熟悉mysql系列函數者pdo
則支援十幾種資料庫,因此,若有需要切換資料庫者,這是不二選擇,缺點是性能較 mysqli
差一點。請根據上述表單及資料庫欄位來產生PHP 8.2的程式語法:
將表單送到 admin.php 後
將所有值以PDO物件用?佔位符的方式,存入上述資料表中,並取得存入的 id 值。
接著根據 id 值建立 uploads/id/ 文章檔案目錄來存放圖檔
完成多個檔案上傳至文章檔案目錄的功能,並以檔名為索引,檔案路徑為值,存為 json 格式。
取得json值後,更新該文章的 media 欄位值
會產生如下結果:
<?php
// 處理檔案上傳
$uploadDir = 'uploads/'; // 上傳目錄
// 處理表單提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 取得表單的值
$title = $_POST['title'];
$content = $_POST['content'];
$author = $_POST['author'];
$date = $_POST['date'];
$category = $_POST['category'];
// 建立資料庫連接
$dsn = 'mysql:host=localhost;dbname=your_database;charset=utf8mb4';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 準備SQL語句
$sql = "INSERT INTO news (title, content, author, date, category) VALUES (?, ?, ?, ?, ?)";
// 預備語句
$stmt = $pdo->prepare($sql);
// 綁定參數並執行語句
$stmt->execute([$title, $content, $author, $date, $category]);
// 取得插入的資料行數
$rowCount = $stmt->rowCount();
if ($rowCount > 0) {
// 取得插入的 id 值
$lastInsertId = $pdo->lastInsertId();
// 建立存放圖檔的目錄
$articleDir = $uploadDir . $lastInsertId . '/';
if (!file_exists($articleDir)) {
mkdir($articleDir, 0777, true);
}
// 處理多檔案上傳
if (!empty($_FILES['media'])) {
$fileData = array();
foreach ($_FILES['media']['name'] as $index => $fileName) {
$fileTmpName = $_FILES['media']['tmp_name'][$index];
$fileDestination = $articleDir . $fileName;
// 將檔案移動到文章檔案目錄
move_uploaded_file($fileTmpName, $fileDestination);
// 將檔案路徑存入陣列
$fileData[$fileName] = $fileDestination;
}
// 將檔案相關資訊轉換為JSON格式
$media = json_encode($fileData);
// 更新該文章的 media 欄位值
$updateSql = "UPDATE news SET media = ? WHERE id = ?";
$updateStmt = $pdo->prepare($updateSql);
$updateStmt->execute([$media, $lastInsertId]);
}
echo "資料插入成功!";
} else {
echo "資料插入失敗!";
}
} catch (PDOException $e) {
echo "資料庫連接錯誤:" . $e->getMessage();
}
}
基本上已經差不多相當完整,我們稍加調整即可,所以,先建立一個新檔,貼上以上語法,存為 admin.php
即可。
每次產生結果可能都不太一樣,不過,大致可以分為幾大部份:
過濾存入變數
指定並建立上傳目錄
連線資料庫
寫入資料庫