原文直接拼接 $_POST 變數進 SQL 字串,極度危險,嚴禁用於生產環境。正確做法:**預處理語句 + 參數綁定**。
<?php
// db.php - 連線設定
$mysqli = new mysqli('localhost', 'username', 'password', 'databasename');
$mysqli->set_charset('utf8mb4');
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // 拋出例外
// insert_user.php
require 'db.php';
try {
// 1. 準備 SQL,使用 ? 佔位符
$sql = "INSERT INTO users (fname, lname, comments) VALUES (?, ?, ?)";
$stmt = $mysqli->prepare($sql);
// 2. 綁定參數:'sss' 表示三個字串
$stmt->bind_param('sss',
$_POST['fname'] ?? '',
$_POST['lname'] ?? '',
$_POST['comments'] ?? ''
);
// 3. 執行
$stmt->execute();
echo "✅ 用戶資料新增成功,ID: {$mysqli->insert_id}";
$stmt->close();
} catch (mysqli_sql_exception $e) {
error_log("Insert Error: {$e->getMessage()}");
echo "❌ 新增失敗,請稍後再試";
} finally {
$mysqli->close();
}
| 類型字元 | 對應 PHP 類型 | 範例 |
|---|---|---|
i | integer | 123, (int)$_POST['age'] |
d | double (float) | 12.34, (float)$_POST['price'] |
s | string | 'text', $_POST['name'] |
b | blob (二進位) | $fileContent |