Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php 7.4 mysqli_query в методе write в классе сессий возвращает пустоту и не отрабатывает / 3 сообщений из 3, страница 1 из 1
14.04.2020, 22:47
    #39947283
evgen29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php 7.4 mysqli_query в методе write в классе сессий возвращает пустоту и не отрабатывает
Здравствуйте! Есть простой код, когда механизм сессий описан в классе. Для php 7.4. пытаюсь сделать простой тест записи в базу значения переменной сессии и ничего не происходит. Всё перекопал не понимаю проблемы. Если делать просто соединение с БД и запись в бд, то все норм. В механизме сессий запись ничего не делает, хотя и ошибки в логе нет. Просто возвращает пустоту mysqli_query. Таблица сессий и таблица пользователей MyISAM. Не пойму в чем дело. Вот мой код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
<?php
class Session_class implements SessionHandlerInterface
{
  private $db;
  private function logx($str)
  {
	$log = date('Y-m-d H:i:s') . $str;
    file_put_contents(__DIR__ . '/log.txt', $log . PHP_EOL, FILE_APPEND);

  }
  public function open($savePath, $sessionName)
  {	
    Session_class::logx("$savePath, $sessionName");
    $this->db = mysqli_connect('localhost','root','12345','restservice'); 
    if (!$this->db) throw new Exception(mysqli_connect_error());
    return TRUE;
  }
  public function close()
  {
	mysqli_close($this->db);  
    return TRUE;
  }
  public function read($id)
  {
  
	$result = mysqli_query($this->db,'SELECT Session_Data FROM Session WHERE Session_Id = "'.$id.'"');
    if($row = mysqli_fetch_assoc($result)){
	  Session_class::logx(' чтение сессии result='.$row['Session_Data']);
      return $row['Session_Data'];
    }else{
	  Session_class::logx(' чтение сессии result=');
      return "";
    }
  }
  public function write($id,$data)
  {
     
        $DateTime = date('Y-m-d H:i:s');
        $NewDateTime = date('Y-m-d H:i:s',strtotime($DateTime.' + 1 hour'));	    
		$sql = 'REPLACE INTO Session SET Session_Id = "'.$id.'", Session_Expires = "'.$NewDateTime.'", Session_Data = "'.$data.'"';
		Session_class::logx(' '.$sql);
		$result = mysqli_query($this->db, $sql);
		Session_class::logx(' Запись сессии result='.$result);
        if($result){
            return true;
        }else{
            return false;
        }

  }
    public function destroy($id)
    {
		$result=mysqli_query($this->db,'DELETE FROM Session WHERE Session_Id = "'.$id.'"');
		Session_class::logx(' Уничтожение сессии result='.$result);
        if($result){
            return true;
        }else{
            return false;
        }
    }
    public function gc($maxlifetime)
    {
        $result = mysqli_query($this->db,'DELETE FROM Session WHERE ((UNIX_TIMESTAMP(Session_Expires) + '.$maxlifetime.') < '.$maxlifetime.')');
		Session_class::logx(' Очистка мусора result='.$result);

        if($result){
            return true;
        }else{
            return false;
        }		
    }
}
$sess=new Session_class();
session_set_save_handler($sess, true);
session_start();
$_SESSION['TEST']='TEST';
?>



лог пишет следующее:
Код: php
1.
2.
3.
4.
2020-04-14 19:34:19C:\PHPServer74\tmp, PHPSESSID
2020-04-14 19:34:19 чтение сессии result=
2020-04-14 19:34:19 REPLACE INTO Session SET Session_Id = "5p9ukfbfhu0rah0vpb53unvc9i", Session_Expires = "2020-04-14 20:34:19", Session_Data = "TEST|s:4:"TEST";"
2020-04-14 19:34:19 Запись сессии result=
...
Рейтинг: 0 / 0
14.04.2020, 23:05
    #39947289
evgen29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php 7.4 mysqli_query в методе write в классе сессий возвращает пустоту и не отрабатывает
Нашёл ошибку. Она в ДНК ))) . Сделал var_dump($sql) и увидел там неправильно расставленные двойные и одинарные кавычки

решение:
$sql = "REPLACE INTO Session SET Session_Id = '$id', Session_Expires = '$NewDateTime', Session_Data = '$data'";

наверное надо написать, чтобы быстрее голова стала работать.
...
Рейтинг: 0 / 0
14.04.2020, 23:10
    #39947291
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php 7.4 mysqli_query в методе write в классе сессий возвращает пустоту и не отрабатывает
evgen29
лог пишет следующее:
1. Что за бардак с кавычками в конце строки запроса?
2. Конкатенация строки и булева значения или объекта (см. https://www.php.net/manual/ru/mysqli.query.php раздел "Возвращаемые значения") - это не работает. Соответственно, ничего внятного и не видите. Используйте print_r($var, true). А ещё mysqli умеет отдавать сообщения об ошибке. Там много интересного можно найти.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php 7.4 mysqli_query в методе write в классе сессий возвращает пустоту и не отрабатывает / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]