|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Ошибка при использовании mysql_real_escape_string() |
|
[решено] Ошибка при использовании mysql_real_escape_string()
|
Старый параноик Сообщения: 2423 |
Профиль | Отправить 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] ) Происходит это в коде вида такого: Я пытался 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(); <- там и происходит ошибка Как это починить? Есть одна мысль, в принципе, но она уж какая-то бредовая и её проверка требует времени :-/ Может, у кого-то есть уже опыт работы с этим? |
|
Отправлено: 12:44, 26-11-2007 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Попытайтесь определить было ли успешным соединение с базой. А то возможно, что просто вышел лимит соединений и $DB->connect(); дали отлуп.
|
------- Отправлено: 13:26, 26-11-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Цитата hasherfrog:
Цитата Prisoner:
hasherfrog, А только с этой функцией проблемы? а как другие mysql_* фукнции себя ведут? |
||
------- Отправлено: 15:54, 26-11-2007 | #3 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать "Мега-Мысль" свою проверил, как и подозревал, бредятина :-)
>> А только с этой функцией проблемы? а как другие mysql_* фукнции себя ведут? Только с этой. Остальные, может, когда-то что-то писали по мелочи, но я в конечном итоге всё разрулил, пусть даже косвенно. >> Или посмотреть, есть ли ещё соединение. >> Попытайтесь определить было ли успешным соединение с базой Как? В этом-то и затык. Я чего-то "теоретически", видимо, не понимаю. Что такое это "соединение"? Цитата hasherfrog:
Переменная connection_id в классе db_driver определена как var connection_id = ""; и её значение внутри connect() инициализируется так:
Никакого сообщения об ошибке я не вижу. Но выполняющаяся следом mysql_real_escape_string() (это в $ibforums->input = $std->parse_incoming(); ) уже никакого соединения не находит. ??? Как быть? Как проверить, нее потерялось ли оно, это соединение? И как (если уж на то пошло) оно вообще "теряется" (или не устанавливается, но без ошибки[!] при этом) в теории? |
|
Отправлено: 11:50, 27-11-2007 | #4 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать hasherfrog,
Проверьте значение connection_id Если False, то соединение не успешно, если же имеет какоето значение, значит соединение произошло |
|
------- Отправлено: 12:11, 27-11-2007 | #5 |
runs with scissors Сообщения: 642
|
Профиль | Отправить PM | Цитировать может просто mysql_escape_string? разница в них не очень большая.
|
------- Отправлено: 15:26, 27-11-2007 | #6 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Цитата Arrest:
|
|
------- Отправлено: 15:49, 27-11-2007 | #7 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Всё, исправил, спасибо всем.
В общем, я проверяю connection_id, потом, в зависимости от результата, пользуюсь либо mysql_escape_string, либо mysql_real_escape_string(). Ошибки вроде пропали. Немного тревожит использование mysql_escape_string(), но в контексте кода (там ещё проверка на валидность маске IP) инъекция вряд ли возможна. |
Отправлено: 14:14, 28-11-2007 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ошибка при использовании .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 |
|