Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
 |  |
могу только показать как я делаю, т.к. в перле не силён(и в... 19.04.05 10:59 Число просмотров: 1599
Автор: Winer <Виктор С.> Статус: Member
|
могу только показать как я делаю, т.к. в перле не силён(и в DBI тоже)
$query="SELECT MAX(DATE_FORMAT(date_add,'%Y%m%d000000')) AS max_date FROM hourly";
$rs=$dbh->prepare($query);
$rs->execute;
$max_date=$rs->fetchrow_hashref;
$max_date=$max_date->{max_date};
$rs->finish;
вообще удобно запрос записывать в отдельную переменную(а-ля $query='bla-bla-bla'), его потом можно вывести и посмотреть, действительно ли он такой, как ожидалось.
|
<beginners>
|
[lame, DBI] Не могу разобраться с mysql 19.04.05 03:33
Автор: Heller <Heller> Статус: Elderman
|
Только вот начал изучать мускул, пару дней как, а заставить работать его с DBI не получается. Вот код, взятый откуда-то (ссылку потерял):
use DBI;
my $dsn='DBI:mysql:test:localhost';
my $db_user_name='root';
my $db_password='qwerty';
my ($id,$password);
my $dbh=DBI->connect($dsn,$db_user_name,$db_password);
'test' - это существующая база (создавалась отдельно через консоль как 'create database test;'). В общем на этот код я получаю сообщение: "DBI connect('test:localhost','root',...) failed: Can't connect to MySQL server on 'localhost' (10061) at base.pl line 7".
Возможно, я не так установил DBI? Устанавливал с помощью PPM два модуля: сам DBI и DBD-mysql (везде последние версии). Больше для установки ничего не делал. Операционка WinXP.
MySQL настраивал через Instance Config Wizard; настройки: Developer Machine, Multifunctional Database, Decision Support (DSS)/OLAP, Disable TCP/IP Networking, Character set cp1251, пароль для рута выставлялся там же, ставил отдельно галку 'Root may only connect from localhost'. Больше ничего не трогал.
Ссори за ламерство - первый опыт с базами в принципе. Даже Access'а в глаза до этого не видел :-)
|
 |
Ещё вопрос по DBI::mysql 19.04.05 10:06
Автор: Heller <Heller> Статус: Elderman
|
Пример взят полностью из статьи на mysql.ru:
use DBI;
my $dsn='DBI:mysql:test:localhost';
my $db_user_name='root';
my $db_password='qwerty';
my ($id,$password);
my $dbh=DBI->connect($dsn,$db_user_name,$db_password);
$input_nickname='Cowlick';
$input_password='udder';
my $sth = $dbh->prepare(qq{select id, password from users where nickname = '$input_nickname'});
$sth->execute();
($id, $password) = $sth->fetchrow_array();
print join ", ", keys(%{$sth});
$sth->finish();
if ($input_password eq $password)
{
print "OK!";
}
Почему-то не работает. Пользователь Cowlick точно есть в таблице - при точно такой же команде в консоле, которую я указываю в prepare нормально выводится id и password, а вот в результате я ничего не получаю: fetchrow_array возвращает пустой список, хотя я сверялся с мануалом по DBI - там даны совершенно аналогичные примеры.
Пытался сам разобраться в ситуации - в $sth лежит "DBI::st=HASH(адрес)". Пробовал такую конструкцию: keys(%{$sth}) - возвращает пустой список. Не знаю что это значит и должно ли по тому адресу быть хоть что-то - в код DBI не вникал. prepare по идее работает нормально, т. к. если указать ошибочный запрос, выводится предупреждение. Видимо, либо execute не захватывает ответ сервера, либо я не так fetchrow_array применяю. В общем, совсем я запустался. Тяжко быть beginners'ом :-(
|
 |  |
могу только показать как я делаю, т.к. в перле не силён(и в... 19.04.05 10:59
Автор: Winer <Виктор С.> Статус: Member
|
могу только показать как я делаю, т.к. в перле не силён(и в DBI тоже)
$query="SELECT MAX(DATE_FORMAT(date_add,'%Y%m%d000000')) AS max_date FROM hourly";
$rs=$dbh->prepare($query);
$rs->execute;
$max_date=$rs->fetchrow_hashref;
$max_date=$max_date->{max_date};
$rs->finish;
вообще удобно запрос записывать в отдельную переменную(а-ля $query='bla-bla-bla'), его потом можно вывести и посмотреть, действительно ли он такой, как ожидалось.
|
 |  |  |
Чего-то не получается 20.04.05 00:16
Автор: Heller <Heller> Статус: Elderman
|
> могу только показать как я делаю, т.к. в перле не силён(и в > DBI тоже) > $query="SELECT MAX(DATE_FORMAT(date_add,'%Y%m%d000000')) AS Такой строчки пока не понимаю :-) Только начинаю изучать мускул и пока не в нём не силён - пытаюсь заставить его заработать хотя бы на простом примере.
По аналогии с приведённым кодом пытался заменить fetchrow_array на fetchrow_hashref - никакого эффекта. А можете скинуть рабочий пример с DBI но только на более простую базу? А то я пока в мускуловских конструкциях не сильно секу. А писал я так:
use DBI;
my $dsn='DBI:mysql:test:localhost';
my $db_user_name='root';
my $db_password='qwerty';
my $dbh=DBI->connect($dsn,$db_user_name,$db_password);
$input_nickname='Cowlick';
$query="select id,password from users where nickname='$input_nickname'";
$rs=$dbh->prepare($query);
$rs->execute;
print $rs->fetchrow_hashref;
$rs->finish;
|
 |  |  |  |
тогда надо отлаживать :) 20.04.05 08:22
Автор: Winer <Виктор С.> Статус: Member
|
тогда надо отлаживать :)
во-первых, запрос сначала записывать в переменную, потом выводить на экран,только потом подставлять в prepare.
во-вторых, начать с более простых запросов, а-ля 'SELECT * FROM table_name'
в-третьих, qq{string}, если я не ошибаюсь, прослэшит все кавычки в запросе, а не только в переменной( where field_name=\'value\'), так ???
|
 |  |  |  |  |
Заработало :) 21.04.05 01:42
Автор: Heller <Heller> Статус: Elderman
|
В чем была ошибка - так и не понял. Вроде сейчас делаю всё точно так же и всё работает. То ли глюки может быть какие-то были единичные и спасла перезагрузка (хотя врят ли), то ли я просто не к тем столбцам обращался по невнимательности - чёрт его знает.
Насчёт qq{...} - это обыкновенные псевдокавычки. Работают в полной аналогии с "..." с единственным исключением отличием - не нужно бэкслешить сами кавычки. То есть можно написать qq{Hello "Windows"} и это будет нормально работать. В противном случае мы бы писали "Hello \"Windows\"". Правда, теперь требуется слэшить "}". Больше никаких телодвижений qq не производит.
|
 |
угу, замечательная идея, отключить возможность коннекта к... 19.04.05 08:25
Автор: Winer <Виктор С.> Статус: Member
|
> Disable TCP/IP Networking угу, замечательная идея, отключить возможность коннекта к базе по tcp/ip и пытаться по нему же законнектиться.
|
 |  |
:-) Заработало, спасибо. Хых, я почему-то не думал, что используется TCP/IP. У меня была уверенность, что там IPC применяется. 19.04.05 08:44
Автор: Heller <Heller> Статус: Elderman
|
|
|
|