まだ進行中です、間違いがあればご指摘ください
私の仕事の経験が浅いため、データベース接続を完全にカバーすることはできません 予期しないバグがある可能性があります。
したがって、このシリーズはアイデアを提供するだけです。成熟した安定したデータベースパッケージを自分で検索してください
このシリーズを書く本来の目的は、各セクションの最後に次のことを記載します。個人的な質問があります (またはそうでない)。専門家が私の質問に答えるのを手伝ってくれることを願っています
使用している PHP のバージョンは 7.0 以降で、このシリーズには下位互換性がありません。まだバージョン 5.6 を使用している子供たちが来て、 play
データベースのカプセル化はlaravelのソースコードを参照しています
簡単な設定の後、それができるようになったとします。次のように直接呼び出すことができます
$a = Actor::select('first_name', 'last_name') ->where('first_name', 'NICK') ->where('last_name', 'WAHLBERG') ->first() var_dump($a);
戻り形式
object(Actor)[11] public 'first_name' => string 'NICK' (length=4) public 'last_name' => string 'WAHLBERG' (length=8)
返されたデータはまだ操作可能です(update/delete)
$a->update(...); $a->delete();
PHPをある程度理解している人はそれを知っています削除された mysql や置き換えられた mysqli と比較して、pdo は SQL インジェクション攻撃を回避でき、より安全で、オブジェクト指向であるため、以下では例として pdo を使用します
<?php $driver='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $db = 'sakila'; //数据库名称 $username='root'; //数据库连接用户名 $password=''; //数据库密码 $dsn="$driver:host=$host;dbname=$db"; try { $pdo= new PDO($dsn, $username, $password); //初始化一个PDO对象 $sql = "select * from actor"; $res = $pdo->query($sql); // 从actor中获取所有数据 foreach($res as $row) echo $row['first_name']."<br>"; } catch (PDOException $e) { die($e->getMessage()); }
上記の例は非常に簡潔ですプロジェクトが成長し、ますます複雑になると、通常自分で作成するいくつかの補助関数 と同じように、コードの重複を減らすために Encapsulate クラスが必要になりますが、カプセル化されたクラスはもう少し高度です。
基本的な考え方 では、どのように書けばいいのでしょうか?まず、コードを簡略化する必要がある場合、通常、いくつかの補助関数を自分で作成します。たとえば、私は個人的に悪い癖があり、
エディタのデバッグ機能を使用するのが好きではありません。 : sublime text 3)を使用しているのですが、デバッグ時に最初にこう書いてあった
$a = "is bug"; die(var_dump($a)); // 输出变量并且停止运行之后的代码 /***从xdebug得知bug出现在这一行,所以查看上一行的逻辑与数据 ***/die(var_dump())の出現率が少し高いので、補助関数として書きました
function dd($var) { die(var_dump($var)); }同様の理由で, データベースから読み取る場合は、選択します 使用率が非常に高いので、単純にラップします
function select($pdo, $table, $require, $where = []) { $w = []; // 将搜索条件转化为数据库命令能接受的格式 foreach ($where as $key => &$val) $w[] = "$key = '$val'"; // 有时候并不需要条件,仅仅将所有数据取出,因此$where默认为空 if(!empty($w)) $w = "where ".implode(', ', $w); else $w = ""; // 生成sql query $sql = "select $require from $table $w"; // 将已生成的query带入pdo实例 $res = $pdo->query($sql); // 返回结果 return $res->fetchAll(); }example
select($pdo, 'actor', '*', ['first_name'=>'PENELOPE']) /** * 生成sql query => select * from actor where first_name = 'PENELOPE' **/まとめると、データベースのカプセル化を簡単に説明すると、補助関数にパラメータを取り込み、SQL を自動的に生成させることです。コマンド。 データベースのカプセル化
Model.php - エントリファイルテーブルの設定、リクエストの受け入れ、レスポンスの返しを担当します
以上が独自のデータベース パッケージを作成する方法 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。