我有一个数据流,访问者计数器,我想每次有人访问该页时都添加一行。我得到他们的知识产权,然后我检查数据库中是否没有一行知识产权。如果没有,我添加一个新的行。如果数据库不存在,则向数据库添加一行
$visitor_ip = getUserIP();
if(!isset($db)) $db = connect_db(); // connecting to the databaste with PDO
$userName = $_SESSION['username'];
$query = "SELECT entries from visitorsCounter WHERE ip=:ip";
$stmt = $db->prepare ($query);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->execute();
$result = $stmt->fetch (PDO::FETCH_ASSOC);
if($result != null){ // **** if there isn't a row with that IP ****
$addEntryQuery = "UPDATE visitorsCounter SET entries = entries + 1 WHERE ip=:ip";
$stmt = $db->prepare ($addEntryQuery);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->execute();
}
编辑:添加用户代码中的一行:
$userName = $_SESSION['username'];
$query = "INSERT INTO visitorsCounter(ip, entries, user)
VALUES (:ip, 1,:user)
ON DUPLICATE KEY UPDATE entries = entries + 1;
";
$stmt = $db->prepare ($query);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->bindParam (":user", $userName);
$stmt->execute();
if(isset($_SESSION['username'])){
$addEntryQuery = "UPDATE visitorsCounter SET user = :user WHERE ip=:ip";
$stmt = $db->prepare ($addEntryQuery);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->bindParam (":user", $userName);
$stmt->execute();
}
访问者进来的网站,用户在数据库空。但是当他登录时,它保持为空。任何想法为什么?
我认为第一个sql语句(select)或多或少是多余的,尤其是如果您将ip设置为唯一键后,使用'insert into visitorsCounter .... on duplicate key update ...'。也就是说,多个用户可以拥有相同的IP地址,并且用户可以拥有多个IP ... – RamRaider
您的检查行是否存在的逻辑不起作用。如果您的列的默认值为NULL并接受NULL值,则为'null'!=“空”或“不存在”。你也可以添加一个附加的where子句。 –
@RamRaider你是对的。我该如何处理? – Dave