
在 PHP 中连接数据库后,动态添加表内容(即执行 INSERT
操作)是非常常见的数据库操作,适用于将表单数据、API数据、脚本生成内容等写入数据库。
✅ 一、基本步骤概览
🚀 二、使用 PDO 动态插入数据(推荐)
示例:向 users
表插入数据
// 数据库配置
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';
$user = 'root';
$pass = '';
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 要插入的数据(动态构建)
$data = [
'username' => 'alice',
'email' => 'alice@example.com',
'created_at' => date('Y-m-d H:i:s')
];
// 动态构建 SQL
$fields = implode(', ', array_keys($data));
$placeholders = ':' . implode(', :', array_keys($data));
$sql = "INSERT INTO users ($fields) VALUES ($placeholders)";
$stmt = $pdo->prepare($sql);
// 执行插入
$stmt->execute($data);
echo "插入成功,ID:" . $pdo->lastInsertId();
} catch (PDOException $e) {
echo "数据库错误:" . $e->getMessage();
}
🧠 三、动态字段插入的场景技巧
1. 用户表单 POST 数据
$data = $_POST;
// 注意过滤与验证安全性
2. 接收 JSON 数据并插入
$json = file_get_contents('php://input');
$data = json_decode($json, true);
🛡️ 四、安全注意事项(防 SQL 注入)
- 永远使用
prepare + execute
- 不要拼接 SQL 字符串直接插入变量
- 验证字段是否存在于表结构中(白名单)
🧪 五、支持批量插入
$dataList = [
['username' => 'user1', 'email' => 'a@example.com'],
['username' => 'user2', 'email' => 'b@example.com'],
];
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt = $pdo->prepare($sql);
foreach ($dataList as $data) {
$stmt->execute([$data['username'], $data['email']]);
}
🧩 六、使用 MySQLi 示例(可选)
$conn = new mysqli('localhost', 'root', '', 'test');
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss", $username, $email);
$username = 'bob';
$email = 'bob@example.com';
$stmt->execute();
🏁 七、总结:动态插入的关键
步骤 | 技巧建议 |
---|---|
构建字段 | 使用 array_keys() 和占位符构建 |
安全防注入 | 使用 prepare + execute |
可读性和维护性 | 封装为函数或类方法 |
插入成功判断 | 使用 rowCount() 或 lastInsertId() |