<?php
// 配置数据库连接
$host = 'localhost';
$db = 'ad_database';
$user = 'root';
$pass = 'password';
$dsn = "mysql:host=$host;dbname=$db;charset=utf8";
// 创建 PDO 实例
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo '连接失败: ' . $e->getMessage();
exit;
}
// 处理广告展示
if (isset($_GET['ad_id'])) {
$adId = (int)$_GET['ad_id'];
// 记录广告展示事件
$displayStmt = $pdo->prepare('
INSERT INTO ad_displays (ad_id, displayed_at)
VALUES (:ad_id, NOW())
');
$displayStmt->execute(['ad_id' => $adId]);
// 获取广告信息
$adStmt = $pdo->prepare('
SELECT title, url
FROM ads
WHERE id = :ad_id
');
$adStmt->execute(['ad_id' => $adId]);
$ad = $adStmt->fetch(PDO::FETCH_ASSOC);
if ($ad) {
// 返回广告信息
header('Content-Type: application/json');
echo json_encode([
'title' => $ad['title'],
'url' => $ad['url']
]);
exit;
} else {
echo json_encode(['error' => '广告不存在。']);
}
} else {
echo json_encode(['error' => '无效的广告 ID。']);
}
?>
-
记录广告展示事件:当广告被展示时,系统通过
ad_id
参数记录广告的展示信息。展示事件会被插入到ad_displays
表中,包括广告 ID 和展示时间 (displayed_at
)。 -
返回广告信息:根据
ad_id
从ads
表中检索广告的标题和目标 URL,然后以 JSON 格式返回广告的信息。这使得前端应用程序可以动态地显示广告内容。 -
安全性和验证:代码中使用了参数化查询来防止 SQL 注入攻击,并且只有在存在有效广告 ID 时才会返回广告信息。
数据库表结构:
-
ads
表:存储广告信息id
(INT, 主键)title
(VARCHAR)url
(VARCHAR)
-
ad_displays
表:记录广告展示信息id
(INT, 主键)ad_id
(INT, 外键,指向ads
表)displayed_at
(DATETIME)