Answer the question
In order to leave comments, you need to log in
Why is SQLite not writing results to PHP?
Good afternoon (or evening, maybe someone)
I'm trying to write a script that would keep online statistics of users (more precisely, the number of users at the moment)
In general, I painted something, but it doesn't write anything to the database.
function users_online()
{
// TODO: Сделать так чтобы работал сам по себе, не использовал базу данных, только SQLite.
// TODO: Возможность отслеживать пользователей до недели или месяца.
$sqlfile = ROOTPATH.UNIQHASH.DIRECTORY_SEPARATOR.SQLITEDB;
$track = new Visitor();
$sqlite = new SQLitedb($sqlfile);
if (session_id() == '') session_start();
$session = session_id();
$curTime = time();
$timeout = $curTime - 60; // Время
$ip = $track->get_ip();
$sqlite = new SQLite3(':memory');
$sqlite->exec('CREATE TABLE IF NOT EXISTS tmp_users_online (
`session` varchar(255) NOT NULL,
`usertime` varchar(255) NOT NULL,
`ip` varchar(255) NOT NULL
)');
$sql = 'SELECT COUNT(*) as count FROM tmp_users_online WHERE session = :sess';
$getusers = $sqlite->prepare($sql);
$getusers->bindValue(':sess', $session, SQLITE3_TEXT);
$result = $getusers->execute();
// Проверяем существует данный пользователь в базе
$u_online = $result->fetchArray(SQLITE3_ASSOC)['COUNT(*)'];
if (1 <= $u_online)
$sql = 'UPDATE tmp_users_online SET usertime = :curtime, ip = :addr WHERE session = :sess';
else
$sql = 'INSERT INTO tmp_users_online (usertime, ip, session) VALUES (:curtime, :addr, :sess)';
$objusers = $sqlite->prepare($sql);
$objusers->bindValue(':curtime', $curTime, SQLITE3_TEXT);
$objusers->bindValue(':addr', $ip, SQLITE3_TEXT);
$objusers->bindValue(':sess', $session, SQLITE3_TEXT);
$objusers->execute();
// Удаляем пользователей которые ушли с сайта определяем по $timeout
$sql = 'DELETE FROM tmp_users_online WHERE usertime < :tmout';
$deluser = $sqlite->prepare($sql);
$deluser->bindValue(':tmout', $timeout, SQLITE3_TEXT);
$deluser->execute();
// Достаем количество пользователей сейчас на сайте
$sql = 'SELECT COUNT(*) as count FROM tmp_users_online';
$fonline = $sqlite->querySingle($sql);
print_r($fonline);
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question