<?php
$host = 'localhost'; $user = 'root'; $pass = 'password'; $db = 'phpdev';
$mysqli = new mysqli($host, $user, $pass, $db);
if ($mysqli->connect_errno) { die("連接失敗: " . $mysqli->connect_error); }
$mysqli->set_charset('utf8mb4');
// 處理表單提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 驗證必填字段
$required = ['country', 'animal', 'cname'];
$errors = [];
foreach ($required as $field) {
if (empty($_POST[$field])) { $errors[] = "{$field} 不能為空"; }
}
if (empty($errors)) {
$country = $_POST['country'];
$animal = $_POST['animal'];
$cname = $_POST['cname'];
// 預處理語句自動處理轉義,防 SQL 注入
$stmt = $mysqli->prepare("INSERT INTO symbols (country, animal, cname) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $country, $animal, $cname);
if ($stmt->execute()) {
echo "記錄插入成功,自增 ID: " . $mysqli->insert_id;
} else {
echo "插入失敗: " . $stmt->error;
}
$stmt->close();
} else {
echo "<ul><li>" . implode("</li><li>", $errors) . "</li></ul>";
}
}
$mysqli->close();
?>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>插入記錄</title></head><body>
<h1>插入操作</h1>
<form method="post" action="">
國家:<input type="text" name="country" required /><br>
動物英文名:<input type="text" name="animal" required /><br>
動物中文名:<input type="text" name="cname" required /><br>
<button type="submit">提交</button>
</form>
</body></html>
mysqli 或 PDO。prepare() + bind_param() 徹底隔離數據與代碼,無需手動 real_escape_string。required 僅作輔助。utf8mb4 支持完整 Unicode(含 Emoji)。<?php
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false, // 使用真實預處理
]);
$stmt = $pdo->prepare("INSERT INTO symbols (country, animal, cname) VALUES (?, ?, ?)");
$stmt->execute([$country, $animal, $cname]);
echo "插入成功,ID: " . $pdo->lastInsertId();
大量數據時,單條 INSERT 效率低。推薦:
1. INSERT INTO ... VALUES (...), (...), ... 多值單語句(注意 max_allowed_packet)。
2. 事務包裹多條 prepare/execute。
3. LOAD DATA INFILE 導入 CSV(需文件權限)。