PHP、MySQLでWebシステムを作成中の独学初心者です。
自分の中で、出来るだけHTMLとSQL文を混ぜたくないという思いがあります。
この考えが合っているのかは分かりませんが、ソースの可読性を高める為になると信じているからです。
そのため、SQL用のファイル/クラスを作り、そこにSQL単位で関数を書きSQL文を書いて行っています。
(パーミッションの設定もしやすい)
今まで短いSQL文だけだったので、自分の中では分かりやすい!いい感じだ!と喜んでいたのですが、カラムの多いテーブルのINSERT/UPDATE文でつまづきました。
引数が大量になり何とも不恰好なソースになってしまったのです。
そこで皆さんはどのような書き方をしているのか教えてもらいたいです。
どうぞよろしくお願いします。
ちなみに今まではこんな感じで書いてました。
php
1// 元クラス 2class DATABASE{ 3 protected $pdo; 4 function __construct($dsn, $user, $pass, $options){ 5 try { 6 $this->pdo = new PDO($dsn, $user, $pass, $options); 7 $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 8 $this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 9 } catch (Exception $ex) { 10 die($ex->getMessage()); 11 } 12 } 13} 14// ログインページで使用 15class LOGIN extends DATABASE{ 16 function login($id, $pass){ 17 try { 18 $sql = "-------ログインチェック用SQL文------"; 19 $stmh = $this->pdo->prepare($sql); 20 $stmh->bindValue(":id", $id, PDO::PARAM_STR); 21 $stmh->bindValue(":pass", $pass, PDO::PARAM_STR); 22 $stmh->execute(); 23 $result = $stmh->fetch(PDO::FETCH_ASSOC); 24 return $result; 25 } catch (Exception $ex) { 26 die($ex->getMessage()); 27 } 28 } 29 function aaaa(){...} 30 function bbbb(){...} 31} 32// 表出力ページで使用 33class LIST extends DATABASE{ 34 function getList($case){ 35 try { 36 $sql = "-------表出力用SQL文------"; 37 $stmh = $this->pdo->prepare($sql); 38 $stmh->bindValue(":case", $case, PDO::PARAM_INT); 39 $stmh->execute(); 40 $result = $stmh->fetch(PDO::FETCH_ASSOC); 41 return $result; 42 } catch (Exception $ex) { 43 die($ex->getMessage()); 44 } 45 } 46 function cccc(){...} 47 function dddd(){...} 48}
補足
↑は上手くいっている部分しか書いてませんでした。
今までの書き方だとINSERT/UPDATEしようとすると↓こうなってしまって、他にスマートな書き方はないかと質問しました。
あくまで例なのでDB設計はスルーで
PHP
1// データ更新用phpで使用 2class UPSERT extends DATABASE{ 3 function insert($name_sei, $name_mei, $name_seikana, $name_meikana, $age, $sex, $hight, $weight, $company, $tel1, $tel2, $address){ 4 try { 5 $sql = "-------レコード挿入SQL文------"; 6 $stmh = $this->pdo->prepare($sql); 7 $stmh->bindValue(":...", $..., PDO::PARAM_INT); 8 ... 9 ... 10 $stmh->execute(); 11 } catch (Exception $ex) { 12 die($ex->getMessage()); 13 } 14 } 15}
例えば、連想配列に格納してそれを受け渡しする(回答を参考にしました)
例えば、受け取る変数分クラスにプロパティを用意しておいて、渡す側で直接そっちに格納する(これがいいかな?)
例えば、そもそもSQL文は関数に入れずに直接書くべき
などなど
すみません、流行りが分からなかったので...
一般的にはこうします、こうするのがよりベターです、というご回答があればぜひお願いします。
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/17 04:20