jcmax
@jcmax
Супер Пользователь

Почему SQLite не записывает результаты в PHP?

Добрый день (или вечер может у кого)

Пытаюсь написать скрипт который бы вел онлайн статистику пользователей (точней количество пользователей в данный момент)

Вообщем, что-то я намалевал, но нифига не записывает в базу.

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);
}
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
Разве sqlite может иметь несколько подключений?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы