Хорошо, я надеюсь, что перед тем, как опубликовать этот вопрос, у меня все было в порядке, потому что я тут и там нашел частички решения, но реального ответа на мою проблему не нашел.
1: Iя использую одноэлементное соединение MySQL с mysqli, не используя хранимые процедуры;
2: я нашел в сети код, объясняющий session_set_save_handler, и встроил его в виде класса с именем MySqlSessionStore;
3: в моей БДВ классе есть эта открытая функция:
public function escapeStringForDB($input)
{
return $this->_link->real_escape_string($input);
}
и $this->_link = new mysqli($host, $user, $password, $database)
4: $db = MySQL::getInstance(array(DB_SERVER, DB_USER, DB_PASS, DB_NAME));
Это то, как я вызываю статическую функцию БД (здесь нет ничего необычного)
Проблема : все работает, пока я не раскомментирую $id = $db->escapeStringForDB($id);
, затем возникает следующая ошибка:
Вызов функции-члена real_escape_string () для необъекта
Пример кода из MySqlSessionStore:
function read($id)
{
$db = MySQL::getInstance(array(DB_SERVER, DB_USER, DB_PASS, DB_NAME));
$id = $db->escapeStringForDB($id);
$db->query("SELECT data FROM sessions WHERE BINARY id = '". $id ."'");
//echo "SELECT data FROM sessions WHERE id = '". $id ."'";
$result = $db->fetch();
if(isset($result) && !empty($result))
{
return $result->data;
}
//MUST send an empty string if no session data
return "";
}
Другие вопросы, замечания:
- Я использую session_regenerate_id (), но, видимо, это нужно удалитьс session_set_save_handler;
- Куда именно я положу
session_write_close();
?У меня это есть в деструкторе моего класса db, но, возможно, это не тот путь; - Я использую это без вреда для других проектов, но здесь, похоже, поведение обработчика сеансаменя это смущает:)
Заранее спасибо, если вам понадобится дополнительная информация, я с удовольствием предоставлю ее.