sqlite3でrowCount()が使えずイラッ★っとした話

一夜のうちにmySQLからpostgresへそしてsqliteに落ち着いた昨日、いかがお過ごしですか。とてもDBな日和を過ごされている事と思います——。

季語がDBってどの季節表してるんでしょうね?などと思いつつこんにちは葛です。

仕事でsqliteを使う事があり、心底イラッとすこし嵌ったところをメモ的に。

クエリを投げてその結果が何行返ってきてるか、というのは結構使うと思うんです。
前提条件で、接続にはPDOを使用していたんですね。
で、PDOのメソッドには rowCount() があるんでそれ使えよ、って話ですけどこの子もくせ者で、なんとsqlite3系からは使えないらしい……ほんと使えない……。

じゃあ query で count を使えば?ってなるんですけど、それじゃあlimitも使えないしなによりバインド変数が使えないじゃない!
ということでこうしました!

$sql = "SELECT hoge FROM hogehoge WHERE ho=? and ge=?";
$stmt = $dbh->prepare($sql);
$stmt->execute(array($ho,$ge));

if(count($stmt->fetchAll(PDO::FETCH_ASSOC)) != 0){
	echo("boolean=1");
}else{
	echo("boolean=0");
}

普通にprepareでクエリを実行した後、返ってくる配列の長さをcountで計算。

ひねりも何もないですがシンプルが一番だと思うの。コードの可読性的もいいし。

※他にいい方法あったら教えてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>