我正在创建数据库
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'),
};
};
收到错误 运行时错误 靠近“desk”:/home/ultramozg/App/lib/App.pm第40行第16行语法错误
这是我的错误?
答案 0 :(得分:2)
我强烈建议您使用Dancer :: Plugin :: Database而不是您提议的connect_db例程。你这样做的方式可能会创建剩余的开放连接,从而产生各种各样的问题。 Dancer :: Plugin :: Database为您处理持久连接。插件文件:
https://metacpan.org/pod/Dancer::Plugin::Database
安装Dancer :: Plugin :: Database并在config.yml中配置它后,无论何时需要数据库句柄,您只需:
my $dbh => database('my_database_name');
完成后不要断开连接。
如果你正在使用ubuntu,只需:
apt-get install libdancer-plugin-database-perl
祝你的项目好运!
答案 1 :(得分:0)
你有一个^ D字符作为首发 - 第一部分的最后一行。请学习阅读输出。它告诉你第16行。
检查代码中“desk”字样的位置。