LINUX.ORG.RU

perl dbi

 


0

2

Добрый день. столкнулся с неожиданной проблемой. при создании коннекта с базой. пример, делаю:

use DBI;
use utf8;
$dbh = DBI->connect($data_source, $username, $password,
          {'pg_enable_utf8' => 1,'pg_utf8_flag' => 1}) or die $DBI::errstr;                                                                                                          
указываю заведомо не правильны логин или пароль и получаю ошибку:
ВАЖНО:  пользователь "user" не прошёл проверку подлинности (по паролю)
ВАЖНО:  пользователь
приходиться делать так, что бы сообщение стало читабельно:
) || die (Encode::decode("UTF-8", DBI->errstr));
как исправить данную проблему?



Последнее исправление: john13 (всего исправлений: 2)

Ответ на: комментарий от pinachet
# locale
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

а чем DBIx::Connector лучше DBI?

john13
() автор топика
Ответ на: комментарий от pinachet

Присоединяюсь к вопросу ТС (чем лучше).

А также добавочный: Что из этого умеет в препаред стейтмент с/без эмуляции? Умеет ли в именованые плейсхолдеры? Биндинг по типам (строка, целое и т.д.)? Возврат в правильном типе (строка, целое и т.д.)?

deep-purple ★★★★★
()

ТС — кроме кодировки терминала, проверь и кодировку всех своих файлов, в которых ты пишешь свой код.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

большой плюс, что он за тебя следит за форками, имеет внятный run/txn интерфейс, может автоматически перезапустить запрос если вдруг протух коннект (привет, мыскуль), а при небольшой доработке (унаследованный класс) можно вообще рестарт запроса делать в ожидании пока дб вернётся

pinachet ★★★★★
()
Ответ на: комментарий от vividsnow

убирал эти флаги. ничего не меняется. как я понимаю, эти флаги говорят что БД будет работать с кодировкой UTF8, но до бд дело еще не дошло, соединение, не установлено!!!

john13
() автор топика

Попробуй use open qw(:std :utf8); А вообще ты все правильно делаешь, декодить ручками самое надежное в этом недоязычке.

bread
()
Ответ на: комментарий от pinachet

автоматически перезапустить запрос если вдруг протух коннект

persistent connection штоле?

А добавочный вопрос ты зачем проигнорировал?

deep-purple ★★★★★
()
Ответ на: комментарий от john13

если в селекте написать не существующую таблицу, то ошибка выводится читаемой, что случилось с коннектом?!!

john13
() автор топика
Ответ на: комментарий от vividsnow

Сто лет назад пофиксили же.

The bug has been fixed in subversion r13749. If you would like 
to confirm the fix locally, it's a small patch to the
dbdimp.c file:

Index: dbdimp.c
===================================================================
--- dbdimp.c    (Revision 13667)
+++ dbdimp.c    (Arbeitskopie)
@@ -271,6 +271,10 @@
        sv_setpvn(DBIc_ERRSTR(imp_xxh), error_msg, error_len);
        sv_setpv(DBIc_STATE(imp_xxh), (char*)imp_dbh->sqlstate);

+       /* Set as utf-8 */
+       if (imp_dbh->pg_enable_utf8)
+               SvUTF8_on(DBIc_ERRSTR(imp_xxh));
+
        if (TEND) TRC(DBILOGFP, «%sEnd pg_error\n», THEADER);

 } /* end of pg_error *
bread
()
Ответ на: комментарий от bread

если 100 лет назад профиксили, то почему у меня не работает как должно? версии пакетов обновил, свежее некуда

john13
() автор топика

$dbh = DBI->connect($data_source, $username, $password, {‘pg_enable_utf8’ => 1,‘pg_utf8_flag’ => 1}) or die $DBI::errstr;

Прямо чувствуется рука мастера:

<?php

$res = mysql_query("some sql") or die("Hacking attempt!");

Как часто я подобное видел в PHP и как-то не задумывался, что это просто перловики сменили работу.

tz4678 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.