ひねりの無いAjaxアプリを作った
http://kasei-san.sakura.ne.jp/rabo/perlAjaxTest/
これは何?
習作として、perl、SQLite、jQueryでひねりの無い、ゲストブック風webアプリを作成
作成中に引っかかったこと等を以下にメモります
誰か似たようなの作るときの参考になれば幸いです
仕様
- サーバとの通信は全てJSON
- 1ページ10件表示で、現在表示中のページの前後2件と、末尾と先頭のリンクを持つ
sqlite
CPANが入っていれば、
cpan > install DBD::SQLite
で、SQLiteと必要なライブラリがインストールされる。便利
- 起動方法
%sqlite3 使用するDBファイル名
- テーブル一覧
sqlite> .tables
- テーブルの内容取得(dump)
sqlite> .dump テーブル名
- テーブル生成例
sqlite> CREATE TABLE test (id INTEGER PRIMARY KEY, date INTEGER NOT NULL, name TEXT NOT NULL, text TEXT);
- PRIMARY KEYを設定しておけば、適当に連番を振ってくれる
- TEXTは、文字長は特に考慮しない(仕様ではMAXあるのかな?)
- 型を指定しなくてもそれなりにやってくれる
perl
さくらのサーバにCPANを入れる方法
使ったライブラリは、
DBI
- 接続
# id、パスワード未指定の場合は、undef # $dbh == 0 で my $dbh = DBI->connect("dbi:SQLite:dbname=テーブル名", ID, パスワード, { AutoCommit => 0, RaiseError => 1, }); #解除 $dbh->disconnect;
■参考
第3章 クラスメソッドを使いこなす[Perl講座 -Smart]
- select
# SELECTの結果を連想配列の配列に格納 $dbh->selectall_arrayref( "SQL文;", { Columns => {} }, ( 変数(カンマ区切り) )
SQLの構文に任意の値を入れるときは、入れたい場所に ? を入れる
# IDが100の情報のみ取得 $dbh->selectall_arrayref( "SELECT * FROM テーブル名 WHERE id = ? ;", { Columns => {} }, ( 100 )
- 他のSQL構文を実行
#例としてinsert my $sth = $dbh->prepare("insert into test (date, name, text) values(?,?,?);"); #bind_paramで、?の中に引数を入れる。 #文字列結合と違って、SQLインジェクションの危険が無い(って事でいいの?) $sth->bind_param(1, $value); my $rtnSts = $sth->execute;
- エラー処理については、後日調査
課題・不明点
- perlの参照を理解していない
- スタイルシートにリファクタリングの余地あり
- もうちょっと、addClassやremoveClassを上手く使いたい…
- XSSや、SQLインジェクションの危険が無いか?
2008/11/24追記
- 一般的には、
- prepare と bind_param を使えば、SQLインジェクションの危険は無いとされているようです
- jQuery.text で出力すれば、XSS危険性はなくなるとされているようです