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

Ответить
Аватара пользователя
hasherfrog

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

Сообщение hasherfrog »

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



Итак, PHP5 / MySQL5, ошибка такая:

[error] PHP Warning: mysql_real_escape_string() [function.mysql-real-escape-string]:

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[/i] как-то использовать (вытащить текущее значение 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.htm, отсбда и большое количество ошибок.



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

Может, у кого-то есть уже опыт работы с этим?
Аватара пользователя
Prisoner

Re: [решено] Ошибка при использовании mysql_real_escape_string()

Сообщение Prisoner »

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

Re: [решено] Ошибка при использовании mysql_real_escape_string()

Сообщение vadimiron »

Цитата hasherfrog:



Я пытался link_identifier как-то использовать (вытащить текущее значение db_driver->connection_id),
[решено] Ошибка при использовании mysql_real_escape_string()




link_identifier и connection_id разные вещи - с ними ничего не получится




Цитата Prisoner:



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




Или посмотреть, есть ли ещё соединение. Например поиграться с mysql_ping()



hasherfrog,

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

Re: [решено] Ошибка при использовании mysql_real_escape_string()

Сообщение hasherfrog »

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



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



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



>> Или посмотреть, есть ли ещё соединение.

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



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




Цитата hasherfrog:



Выходит, что у меня куда-то пропадает соединение при работе PHP-кода
[решено] Ошибка при использовании mysql_real_escape_string()




То есть, в момент, когда пользователь грузит головную страницу и выполняется $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(); ) уже никакого соединения не находит.



??? Как быть? Как проверить, нее потерялось ли оно, это соединение?

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

Re: [решено] Ошибка при использовании mysql_real_escape_string()

Сообщение vadimiron »

hasherfrog,

Проверьте значение connection_id

Если False, то соединение не успешно, если же имеет какоето значение, значит соединение произошло
Аватара пользователя
Arrest

Re: [решено] Ошибка при использовании mysql_real_escape_string()

Сообщение Arrest »

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

Re: [решено] Ошибка при использовании mysql_real_escape_string()

Сообщение vadimiron »

Цитата Arrest:



может просто mysql_escape_string? разница в них не очень большая.
[решено] Ошибка при использовании mysql_real_escape_string()




Но всё же есть Изображение
Аватара пользователя
hasherfrog

Re: [решено] Ошибка при использовании mysql_real_escape_string()

Сообщение hasherfrog »

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



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



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

Вернуться в «Вебмастеру»