有一项任务是通过向数据库添加条目来建立用户对站点访问的简单统计信息。
但是我遇到了这样一个问题,每次重新加载页面时,都会一次又一次地写入表。在我的项目中,我正在使用ORM RedBeanPHP
$_SESSION['visitors'] = array(
$counter_ip = $_SERVER['REMOTE_ADDR'],
$counter_date = date('Y-m-d'),
$counter_browser = $_SERVER['HTTP_USER_AGENT'],
$counter_views = $_SERVER['HTTP_HOST'],
$count = \R::count('counter_visitors'),
);
if (!empty($_SERVER)){
\R::exec("INSERT INTO `counter_visitors` ( `ip`, `browser`, `date`, `views`) VALUES ('$counter_ip', '$counter_browser', '$counter_date', '$counter_views')");
unset($_SESSION['visitors']);
die;
}
答案 0 :(得分:0)
使用准备好的语句防止SQL注入,并将ip设置为主键,并使用插入更新,如下所示:
$stmt = $mysqli->prepare("INSERT INTO counter_visitors (ip, browser, date, views) VALUES( ?,?,?,?) ON DUPLICATE KEY UPDATE browser= ?, date=?, views=?");
如果表counter_visitors中的IP不存在,则会插入一行,如果IP存在,则会更新日期,视图和浏览器