medooのinsertはいただけない

2014/07/18 | medoo

さっそくmedooを試用しているが、いただけない箇所を見つけてしまった。

medoo自体はpdoのwrapperだから、データベース操作失敗時はfalseなりを返してくれればそれでいいのだが、どうやらそうではなかった。問題はinsertの場合。

試用中、insertで、未作成のカラム名を使用してデータを投入しようとしたら、その返り値が「0(文字列)」となった。これはダメだろ。

連番主キーがあり、insertに成功した場合、その返り値は最後に挿入された主キーとなる(ただし文字列として返却されるが)。連番主キーがない場合、もしくは主キーが連番でない場合、insertに成功するとその返り値は「0(文字列)」である。

つまり、成功時と失敗時で同じ返り値となることがあるということだ。error関数でエラーがセットされているかどうかを確認すればいいのだろうけど、使い勝手としてはよくない。medooのソースコードをみたけど、やはり返り値は何らかの数字文字列を返すようになっている。

medooをそのまま使いたいわけではなく、自作フレームワークに組み込みたかったので、さらにmedooのinsert関数を拡張し、insert失敗時はfalseを返すようにした。これで使い勝手は向上するはず。

その他のupdateとかdeleteとかは問題なさそう。さらに使ってみて、評価してみることにする。

medoo

2014/07/14 | medoo

昨今の流行に乗ろうかとFuelPHPにトライしたが早くも挫折。簡単なフレームワークではあるけれど、結局最初は、相応にお作法の勉強をしなくてはならない。しかも「簡単、簡単」と巷では言われているけれど、割と面倒だったりする。

最近のフレームワーク全体に言えることだけれど、たいてい中規模以上のサイトを想定した構造になっているような気がする。そしてPHPもどんどん高機能化が進んでいて、お手軽な言語ではなくなってきた気がするのは私だけではないはずだ。とは言っても、最新の技術は勉強しておかざるをえないわけで、FuelPHPについては今後1ヶ月かけて修得することにする。

当面オリジナルなフレームワークを使うことになるのだが(もう何年も使っている)、今回データベース関連をライブラリで置き換えることにした。今までは自前で書いていて、相応な使い勝手ではあったけれど、ある程度メジャーで専用のライブラリで置換するほうが無難であると考えたのである。

medoo

データベースライブラリはいろいろあるけれど、今回はmedooを使用した。ライブラリで文字列のクオートが出来て、簡単な基本構文さえ関数が容易されていればそれだけでいい。ORマッパーとか全然不要。だって管理しなければならないテーブル数なんてたかが知れているし、データベース周りの高速化のためにSQLをガリガリ手書きしたいわけで、特別なことは出来なくていいからだ。

medooは開発が活発と言いがたいものの、最近も新しいバージョンがリリースされている。基本的にはpdoのラッパーなわけで、直接pdoで記述してもいいような気がするが、そこはまぁなんとなく。ウェブサイトによるとその特徴は下記の通り。

  • 軽量1ファイル(重要!)
  • 簡単(重要!:覚える手間がほとんど不要)
  • パワフル(あまり重要でない:複雑なSQLはガリガリ手書きするので)
  • コンパチブル(まぁ重要:MySQL、PostgreSQL、SQLiteのバリエーションで十分)
  • SQLインジェクション防止(重要:でもソースコードは読んでおく必要あり)
  • MITライセンス(重要!:どこでもお好きにご自由に)

自前フレームワークへの組み込みも終わったので、まず何か一つ開発しなくては。使い勝手はその時にでも紹介することにする。

pChart

2011/11/24 | pChart

グラフをPHPで描画する必要があり、pChartを使うことにした。最近はFlashやJavaScriptでグラフを描画させるのが流行だが、今回はクライアントのブラウザが貧弱な可能性があるので、サーバサイドで処理をして絵柄を出力する方法を採用することにした。

PHPでのグラフ描画は久しぶり。検索してヒットしたのがpChart。昔使っていたphplotは検索でほとんどヒットせず(あんまり使われてないのか)、jpGraphは有償。ということで、見た目も悪くないpChartを使ってみることにした。

サンプルを試すとNoticeレベルのエラーが発生する。

Notice: Uninitialized string offset: 0 in /home/cwj/cwj.minibird.jp/public_html/pchart/pChart/pData.class on line 127

ということでファイルを修正する。pChart/pData.classの125行目($ID=0;の下)に以下の行を挿入。

if(!is_array($this->Data)){$this->Data=array();}

初期化忘れがあるようだ。これでエラーは出なくなったが、ダウンロードしたファイルに含まれるExample1.phpにアクセスしても何も出力されない。なぜ、なぜ。しかたなくひとつずつ確認していくことにしたら、一番最後のグラフを出力しているところで処理が止まっている。ここ。

$Test->Render(“example1.png”);

やむなくソースコードを確認する。確認したのはpChart/pChart.class。で、見てみたらimagepngでファイル名の引数を与えている!。サーバ内を確認すると、確かにexample1.pngができている。そういうことだったのか。

で、調べてみたら別のメソッドが用意されていたStroke()ってやつ。こちらに書きなおして、再度ウェブからアクセスすると無事グラフが描画された。素人的な考えだけど、サンプルスクリプトはStroke()を使ってくれたほうがいいのに。何も出力されないので、PHPを始めたばかりの人だと、使用を諦めた人もたくさんいるんじゃなかろうか。

 

SQLiteを使うとpdoでrowCount()できない

2011/10/11 | PDO, SQLite

SQLでinsert、update、delete文を発行して、結果として影響を受けた行数を知りたい場合がある。pdoの場合、rowCount()というメソッドで知ることが出来るのだが、SQLiteでは使えないことがわかった。PHPのマニュアル中のコメントを読むと、どうやら3系からNGのようだ。

SQLはプリペアードステートメントを使って実行しているんだが、やっぱり無理なんだろうか。SQLiteはちょっといろいろ癖があるっぽい感じだ。

PHPからPDF出力

2011/05/01 | PDF関連

ウェブから印刷用データを配布するのに、久しぶりにPDF出力を試してみた。昨今はCSSである程度の制御もできるようだが、やはりPDFの表現力にはかなわない。

以前はmbfpdfを使用していた。完全にやり方を忘れていたというのもあるし、日本語を簡単に扱いたいというのもあるし、新しいものに触れてみたいというのもある。そして検索で行き着いたのがTCPDF。

TCPDF

これ結構すごい。fpdfから拡張したようなのだが、最初からマルチバイト文字列が使えるようになっている(UTF-8)。日本語フォントも含まれているので、何も手を加えずともそのまま日本語のPDFファイルを作ることが出来る。

そしてfpdfのメソッドがだいたい組み込まれているようで、fpdfからの移植にほとんど手間がかからなかった(最初はfpdfでつくっていたのだが、将来的に日本語も使いたいので、一旦作ったプログラムを移植した)。

後はフォント。利用制限のない日本語フリーフォントでよさげなものを探すことにする。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net