PHP mysqli-> real_escape_string при использовании сессий, сохраненных в БД - PullRequest
0 голосов
/ 29 июля 2010

Хорошо, я надеюсь, что перед тем, как опубликовать этот вопрос, у меня все было в порядке, потому что я тут и там нашел частички решения, но реального ответа на мою проблему не нашел.

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, но, возможно, это не тот путь;
  • Я использую это без вреда для других проектов, но здесь, похоже, поведение обработчика сеансаменя это смущает:)

Заранее спасибо, если вам понадобится дополнительная информация, я с удовольствием предоставлю ее.

1 Ответ

0 голосов
/ 29 июля 2010

Это должно работать:

public function escapeStringForDB($input)
{ 
   $this->connect(); 
   return $this->_link->real_escape_string($input); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...