2013-09-21 3 views
0

Я создать базу данныхDancer :: Tutorial подключиться к SQLite

sqlite3 database 
    create table if not exists entries (
     id integer primary key autoincrement, 
     title string not null, 
     text string not null 
    ); 
    ^D 

Где я должен поставить эту базу данных? После

sub connect_db { 
    my $dbh = DBI->connect("dbi:SQLite:dbname=".setting('database')) or 
     die $DBI::errstr; 

    return $dbh; 
    } 

    sub init_db { 
    my $db = connect_db(); 
    my $schema = read_file('./schema.sql'); 
    $db->do($schema) or die $db->errstr; 
    } 

get '/' => sub { 
    my $db = connect_db(); 
    my $sql = 'select id, title, text from entries order by id desc'; 
    my $sth = $db->prepare($sql) or die $db->errstr; 
    $sth->execute or die $sth->errstr; 
    template 'show_entries.tt', { 
     'msg' => get_flash(), 
     'add_entry_url' => uri_for('/add'), 
     'entries' => $sth->fetchall_hashref('id'), 
    }; 
    }; 

делат ошибка Runtime Ошибки ряд "стол": ошибка синтаксиса в /home/ultramozg/App/lib/App.pm линии 40, строка 16

Что это моя ошибка?

+0

'desk' не отображается нигде в том, что вы представили. Что такое строка 40 из lib/App.pm? – ikegami

+0

Строка 40 my $ sth = $ db-> подготовить ($ sql) или умереть $ db-> errstr; –

+0

hum ... Это не похоже на ошибку от DBI, но если вы настаиваете, что в '$ sql'? – ikegami

ответ

0

У вас есть символ^D для стартеров - последняя строка в первом разделе. Пожалуйста, научитесь читать результаты. Он сообщает вам строку 16.

Проверьте, где в вашем коде также появится слово «стол».

+0

Я создаю эту базу данных в терминале,^D = ctrl D –

+0

сделал u напечатал ошибку. Это «стол» или «desc» гораздо проще найти ошибки с правильными сообщениями. – FaddishWorm

+0

Спасибо, база данных должна находиться в каталоге lib. –

2

Я настоятельно рекомендую вам использовать Dancer :: Plugin :: Database вместо предлагаемой процедуры connect_db. То, как вы это делаете, вероятно, создаст остаточные открытые соединения и, следовательно, всевозможные проблемы. Dancer :: Plugin :: Database обрабатывает постоянные подключения для вас. Doc для плагина:

https://metacpan.org/pod/Dancer::Plugin::Database

После установки Dancer :: Plugin :: База данных и настроить его в config.yml, то всякий раз, когда вам нужно ручкой базы данных, вы просто:

my $dbh => database('my_database_name'); 

и не утруждайте себя отключением.

Если вы используете убунту, просто:

apt-get install libdancer-plugin-database-perl 

Удачи в вашем проекте!

+0

Спасибо за ваши пожелания –