こんにちは!
ナビゲータのEVEです。
本日、宣言通りFetchによりレコードを取得しカラム名及びレコードを取得するプログラムを作りました。結論からいうと、Fetchを使うことにより、項目名もデータも同時に使用できます。
今日も、できるかどうか分からなかったため、予想通り、時間がかかりました。問題は、ダンプした結果を見て、1次元なのか、2次元なのかといったところが、ピンとこないこと・・・。配列のダンプをとり、どのような配列か予想をたてて、ループさせてみて使えるのかどうか確認しています。
Fetchもいろいろ種類があって、説明を読みましたが、ピンとこないので、以下のような感じで、結局全てを検証してみました。
[ソースを作成してみて]
忙しい中、時間があまりないので、解説は明日にしますが、ソースはこんな感じになりました。
/*************************************************
*【メソッド名】Fetchメソッド
*【 引 数 】
* sub :種別
* strSql :SQL文
* Bind :バインド変数
*【返 却 値】
* 正常時:Fetchオブジェクト
* 異常時:False
*【製 造 者】EVE
*【製造年月日】2023年3月12日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* レコードをFetchする
*************************************************/
//データベースを検索する
public function selectFetch(int $sub, //種別
string $strSql //SQL文
array $Bind ) { //バインド変数
//変数定義
static $rtn;//返却値
//データベース検索メソッド
$rtn = $this->selectDb($strSql,$Bind);
//返却値の判定
if ( $rtn == false ) {
//異常の場合
$this->processMessage = "Serch Error";
return false;
}
//SQL文実行処理
try {
//種別の判定を行う
if ( $sub == 1 ) {
//Fetchを実行する
//連想配列
$rtn = ($this->stmt->fetchAll(PDO::FETCH_ASSOC));
} else if ( $sub == 1 ) {
//Fetchを実行する
//一般配列
$rtn = ($this->stmt->fetchAll(PDO::FETCH_NUM));
} else if ( $sub == 2 ) {
//Fetchを実行する
//一般配列/連想配列
$rtn = ($this->stmt->fetchAll(PDO::FETCH_BOTH));
} else if ( $sub == 3 ) {
//Fetchを実行する
//連想配列
$rtn = ($this->stmt->fetchAll(PDO::FETCH_NAMED));
} else if ( $sub == 4 ) {
//Fetchを実行する
//オブジェクト
$rtn = ($this->stmt->fetchAll(PDO::FETCH_OBJ));
} else if ( $sub == 5 ) {
//Fetchを実行する
//スカラー値
$rtn = ($this->stmt->fetchAll(PDO::FETCH_COLUMN));
} else if ( $sub == 6 ) {
//Fetchを実行する
//bindColumnメソッドでバインドされたPHP
$rtn = ($this->stmt->fetchAll(PDO::FETCH_BOUND));
} else if ( $sub == 7 ) {
//Fetchを実行する
//指定されたクラスにフェッチ
$rtn = ($this->stmt->fetchAll(PDO::FETCH_CLASS));
} else {
//予想外の種別が設定されている場合
//返却値を設定し呼び出し元へ制御を移す
$this->processMessage = "Assortment Error";
return false;
}
} catch (PDOException $e) {
//Fetchが失敗した場合
//異常処理結果のメッセージを設定する
$this->processMessage = $e->getMessage();
//返却値を設定し呼び出し元へ制御を移す
return false;
}
//異常処理結果のメッセージを設定する
return $rtn;
}
まだきちんと検証が終わっていないのが、$sub(種別)の判定を1から7まで実施していますが、その中身、(PDO::FETCH_XXXXX)の部分・・・。この部分が変数で持てるかどうかまだ、検証をしていません。今月にはいり、PDOに関するプログラムを複数作っていますが、その経験から、多分できないなと瞬時に思い、以上のプログラムになりました。ただ、正直いって不格好でスマートではありません。以上のプログラムは、きちんと動くことは分かったので。明日、試験的に試してみます。ダメそうな気はしているのですが・・・?
[あとがき]
本プログラミング開始当初、うまくいっていないのは、仕方がないとして、そのうまくいかない理由をインターネットで調べていると、あるサイトでは、ループを用いず一気にデータを取得するために、便利なメソッドって紹介されているなど、プログラミングの気力をくじくような情報が多々ありました。
この手の情報はループで処理できないと使い物になりません。それを考えると、メソッド提供側としては、ループで利用できることを想定して作っているはずです。っという自分の考えを信じ、作り続けてなんとか自分が考えるプログラムが作ることができました。
明日、苦労した点や、本プログラムの機能などをご紹介します。それと、時間をかけるつもりはないのですが、(PDO::FETCH_XXXXX)の部分を変数に置き換えることができるかどうか試してみます。それについても、明日ご報告します。
では、また!
【このカテゴリーの最新記事】