0

私はデータベースを作成しています

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 行目に構文エラーがあります

それは私の間違いですか?

4

2 に答える 2

2

提案している connect_db ルーチンの代わりに Dancer::Plugin::Database を使用することを強くお勧めします。あなたがやっている方法では、おそらく残りの開いた接続が作成され、したがってあらゆる種類の問題が発生します。Dancer::Plugin::Database は永続的な接続を処理します。プラグインのドキュメント:

https://metacpan.org/pod/Dancer::プラグイン::データベース

Dancer::Plugin::Database をインストールして config.yml で設定したら、データベース ハンドルが必要なときはいつでも:

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

完了したら、わざわざ切断しないでください。

ubuntu を使用している場合は、次のようにします。

apt-get install libdancer-plugin-database-perl

あなたのプロジェクトで頑張ってください!

于 2013-09-23T20:34:55.257 に答える
0

最初のセクションの最後の行に、スターター用の ^D 文字があります。出力を読むことを学んでください。16行目を教えてくれます。

「デスク」という単語がコード内のどこに表示されるかも確認してください。

于 2013-09-21T13:30:43.543 に答える