I
I
Ivan Vasilich2019-11-14 21:51:10
PHP
Ivan Vasilich, 2019-11-14 21:51:10

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

1 answer(s)
V
Vladislav Lyskov, 2019-11-14
@jcmax

Can sqlite have multiple connections?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question