我有一個數據流,訪問者計數器,我想每次有人訪問該頁時都添加一行。我得到他們的知識產權,然後我檢查數據庫中是否沒有一行知識產權。如果沒有,我添加一個新的行。如果數據庫不存在,則向數據庫添加一行
$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