[Moscow.pm] хост из $dbh

Alexandr Alexeev afiskon на gmail.com
Вт Сен 11 00:14:16 PDT 2012


Самый простой вариант - прописать $dbh->{__server} при коннекте. Можно
сделать это в классе-наследнике от DBI, как бы наследование для того и
придумано.

А вообще где-то в недрах $dbh так или иначе есть сокет, по нему узнать
можно IP, по которому в случае необходимости можно получить имя хоста.

11 сентября 2012 г., 9:34 пользователь Alexander M. Pravkin
<fduch на antar.bryansk.ru> написал:
> On Tue, 2012-09-11 at 01:24 +0400, Михаил Монашёв wrote:
>> Есть соединение с БД, созданное так:
>> $dbh = DBI->connect(bla-bla-bla);
>>
>> Как   имея   только  $dbh,  желательно  средствами  только  DBI  (т.е.
>> по-правильному),  получить  имя  хоста, к которому сделано соединение?
>> Причём  так,  чтобы работало одинаково на разных серверах и при разном
>> написании  параметров  соединени  (порт  слитно  с  именем  хоста  или
>> отдельным параметром и т.п.).
>>
>> parse_dsn()  выдаёт  то, что снова надо парсить. И когда начинаешь это
>> парсить,  выясняются  выше  описанные  ньансы,  намекающие  на то, что
>> где-то должен быть правильный способ вынуть хост. Он есть?
>
> Вряд ли. Параметры коннекта ('dbname=foo;host=localhost') самому DBI
> фиолетовы, он их передаёт непосредственно драйверу. Дальше всё зависит
> от драйвера.
>
> DBD::Pg, например, заменяет все ';' на пробелы, добавляет туда же
> логин-пароль и передаёт строку целиком в PQconnectdb без разбора.
>
> При уже установленном соединении хост можно вытащить уже средствами
> libpq, это умеет dbd_db_FETCH_attrib("pg_host"):
>
> % perl -MDBI -E 'say DBI->connect("DBI:Pg:dbname=fduch;host=$_")->{pg_host} foreach ("", "localhost", "127.0.0.1")'
>
> localhost
> 127.0.0.1
>
>
> DBD::mysql вроде умеет dbd_db_FETCH_attrib("hostinfo").
>
>
> --
> Alexander M. Pravkin
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
С уважением, Александр
Личный блог: http://eax.me/
Мой форум: http://it-talk.org/
Мой Twitter: http://twitter.com/afiskon


Подробная информация о списке рассылки Moscow-pm