Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Ошибка при использовании mysql_real_escape_string()

Ответить
Настройки темы
[решено] Ошибка при использовании mysql_real_escape_string()

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте. У меня довольно давно есть проблема с mysql_real_escape_string(), всё никак не могу решить, в чём дело. Однажды перевели форум IPB (v1.3 Final) на PHP5 / MySQL5, начались траблы. Все остальные варнинги давно уже вычистил, а тут - никак, периодически всплывает. Мешает, в логи мусор валится, устаешь :]

Итак, PHP5 / MySQL5, ошибка такая:
[error] PHP Warning: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]:
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


Я уже несколько раз пытался переписать код, только хуже становилось :] Синтаксис mysql_real_escape_string:
string mysql_real_escape_string ( string unescaped_string [, resource link_identifier] )

Происходит это в коде вида такого:
PHP код: Выделить весь код

$return['IP_ADDRESS'] = mysql_real_escape_string($return['IP_ADDRESS']); 


Я пытался link_identifier как-то использовать (вытащить текущее значение db_driver->connection_id), но не получается, да и смысла нет - по логике должно использовать соединение именно последнее (как и ставится по умолчанию). Указано, что mysql_real_escape_string() работате только при установленном соединение с СУБД. Выходит, что у меня куда-то пропадает соединение при работе PHP-кода (ну, предположим, отвалился от mysql сервера, теоретически возможно).

Соединение с базой выполняется буквально перед использованием mysql_real_escape_string():
Код: Выделить весь код
$DB->connect();
$ibforums = new info();
$ibforums->input = $std->parse_incoming(); <- там и происходит ошибка
Всё это выполняется постоянно, ибо код с головного index.php, отсбда и большое количество ошибок.

Как это починить? Есть одна мысль, в принципе, но она уж какая-то бредовая и её проверка требует времени :-/
Может, у кого-то есть уже опыт работы с этим?

Отправлено: 12:44, 26-11-2007

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Попытайтесь определить было ли успешным соединение с базой. А то возможно, что просто вышел лимит соединений и $DB->connect(); дали отлуп.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:26, 26-11-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата hasherfrog:
Я пытался link_identifier как-то использовать (вытащить текущее значение db_driver->connection_id), »
link_identifier и connection_id разные вещи - с ними ничего не получится

Цитата Prisoner:
Попытайтесь определить было ли успешным соединение с базой »
Или посмотреть, есть ли ещё соединение. Например поиграться с mysql_ping()

hasherfrog,
А только с этой функцией проблемы? а как другие mysql_* фукнции себя ведут?

-------
Fortes fortuna adiuvat

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:54, 26-11-2007 | #3


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


"Мега-Мысль" свою проверил, как и подозревал, бредятина :-)

>> А только с этой функцией проблемы? а как другие mysql_* фукнции себя ведут?

Только с этой. Остальные, может, когда-то что-то писали по мелочи, но я в конечном итоге всё разрулил, пусть даже косвенно.

>> Или посмотреть, есть ли ещё соединение.
>> Попытайтесь определить было ли успешным соединение с базой

Как? В этом-то и затык. Я чего-то "теоретически", видимо, не понимаю. Что такое это "соединение"?

Цитата hasherfrog:
Выходит, что у меня куда-то пропадает соединение при работе PHP-кода »
То есть, в момент, когда пользователь грузит головную страницу и выполняется $DB->connect(), оно либо выполняется, но идентификатор connection_id становится некорректным, либо он вообще мне возвращается некорректный!!! Правильно?

Переменная connection_id в классе db_driver определена как var connection_id = "";
и её значение внутри connect() инициализируется так:
PHP код: Выделить весь код

... class db_driver { ...


    function 
connect() {
       if (
$this->obj['persistent'])
        {
            
$this->connection_id mysql_pconnect$this->obj['sql_host'] , $this->obj['sql_user'] , $this->obj['sql_pass'] );
        }
        else
        {
            
$this->connection_id mysql_connect$this->obj['sql_host'] , $this->obj['sql_user'] , $this->obj['sql_pass'] );
        }
        
        if ( !
mysql_select_db($this->obj['sql_database'], $this->connection_id) )
        {
            echo (
"ERROR: Cannot find database ".$this->obj['sql_database']);
        }
    } 

Никакого сообщения об ошибке я не вижу. Но выполняющаяся следом mysql_real_escape_string() (это в $ibforums->input = $std->parse_incoming(); ) уже никакого соединения не находит.

??? Как быть? Как проверить, нее потерялось ли оно, это соединение?
И как (если уж на то пошло) оно вообще "теряется" (или не устанавливается, но без ошибки[!] при этом) в теории?

Отправлено: 11:50, 27-11-2007 | #4


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


hasherfrog,
Проверьте значение connection_id
Если False, то соединение не успешно, если же имеет какоето значение, значит соединение произошло

-------
Fortes fortuna adiuvat

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:11, 27-11-2007 | #5


Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить PM | Цитировать


может просто mysql_escape_string? разница в них не очень большая.

-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:26, 27-11-2007 | #6


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата Arrest:
может просто mysql_escape_string? разница в них не очень большая. »
Но всё же есть

-------
Fortes fortuna adiuvat


Отправлено: 15:49, 27-11-2007 | #7


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Всё, исправил, спасибо всем.

В общем, я проверяю connection_id, потом, в зависимости от результата, пользуюсь либо mysql_escape_string, либо mysql_real_escape_string(). Ошибки вроде пропали.

Немного тревожит использование mysql_escape_string(), но в контексте кода (там ещё проверка на валидность маске IP) инъекция вряд ли возможна.

Отправлено: 14:14, 28-11-2007 | #8



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Ошибка при использовании mysql_real_escape_string()

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка при использовании .NET Framework CrOsP Автоматическая установка Windows 2000/XP/2003 2 09-11-2009 10:27
Acer Ferrari 5000 ошибка при использовании Айфона!!!! ZyxerYV Ноутбуки 1 30-06-2008 16:15
Ошибка при использовании Recordset->Save метода angryMF Microsoft Exchange Server 0 16-08-2007 12:23
[решено] Лецензирование ПО при использовании в терминальном сервере barashihin Лицензирование продуктов Microsoft 1 04-07-2007 15:04
[решено] При использовании nslookup в AD - ошибка: DNS request timed out. m2001 Microsoft Windows NT/2000/2003 22 01-06-2005 13:30




 
Переход