2 日前に誕生した非常に軽い PHP データベース ツールキット (これは、非常に軽いことを証明するのに十分です)
)。
2 つのクラス、1 つは PDO 接続を管理する Connection (複数のデータベースをサポート)、もう 1 つはデータベース操作を迅速に実行するために使用される QuickQuery (PDO と PDOStatement の間を行き来する必要はありません)
ダウンロードする必要はなく、オンラインで視聴できます。
- use PersistenceDbAccess;
-
- // フレームワークが初期化される接続情報を追加します
- DbAccessConnection::add(
- 'default',
- 'sqlite',
- '/db/mydb.sqlite',
- null, null, false
- );
-
- // 以下は
- $conn = DbAccessConnection::instance('default');
-
- // クエリ
- $query = new DbAccessQuickQuery($conn);
- $query->prepare( ' select :name as name')->execute(array(':name'=>'tonyseek'));
-
- // オブジェクトは直接反復子として機能し、データ配列を生成します
- foreach($query as $i) {
- var_dump($i);
- }
-
- // 偏執的な場合は、応答を出力する前に手動で切断してください
- DbAccessConnection::disconnectAll();
コードをコピー
- namespace PersistenceDbAccess;
- use InvalidArgumentException、BadMethodCallException;
- use PDO、PDOException;
- /**
- * 接続ファクトリー、グローバル PDO オブジェクトを提供し、トランザクションを管理します。
- *
- * @version 0.3
- * @author tonyseek
- * @link http://stu.szu.edu.cn
- * @license http://www.opensource.org/licenses/mit-license.html
- * @copyright 深セン大学 StuCampus 開発チーム
- *
- */
- 最終クラス Connection
- {
- /**
- * コネクタ インスタンス コレクション
- *
- * @var array
- */
- static private $instances = array();
-
- /**
- * データベースドライバー名
- *
- * @var string
- */
- private $driver = '';
-
- /**
- * データベース接続文字列 (データベース ソース名)
- *
- * @var string
- */
- プライベート $dsn = '';
-
- /**
- * PDO インスタンス
- *
- * @var PDO
- */
- プライベート $pdo = null;
-
- /**
- * ユーザー名
- *
- * @var 文字列
- * /
- private $username = '';
-
- /**
- * パスワード
- *
- * @var 文字列
- */
- private $password = '';
-
- /**
- * 永続的な接続を有効にするかどうか
- *
- * @var bool
- */
- private $isPersisten = false;
-
- /**
- * シミュレーションのプリコンパイルを有効にするかどうか
- *
- * @var bool
- */
- private $isEmulate = false;
-
- /**
- * トランザクション中かどうか
- *
- * @var bool
- */
- private $isInTransation = false;
-
- /**
- * プライベート コンストラクター、new 演算子を使用した外部インスタンス化を防止します
- */
- プライベート関数 __construct(){}
-
- /* *
- * Production Connector インスタンス (複数のインスタンス)
- *
- * @param string $name
- * @return StuCampusDataModelConnector
- */
- static public function getInstance($name = 'default')
- {
- if (!isset(self::$instances[$name])) {
- // アクセスされたインスタンスが存在しない場合はスローされますエラーが発生しました
- throw new InvalidArgumentException("[{$name}] が存在しません");
- }
-
- return self::$instances[$name];
- }
-
- /**
- * すべてのデータベースインスタンスを切断します
- */
- static public functiondetachAll()
- {
- foreach (self::$instances as $instance) {
- $instance->disconnect();
- }
- }
-
- /**
- * データベースを追加
- *
- * コネクタをインスタンス グループに追加
- *
- * @param string $name 識別名
- * @param string $driver ドライバー名
- * @param string $dsn 接続文字列
- * @param string $usrデータベースのユーザー名
- * @param string $pwd データベースのパスワード
- * @param bool $emulate シミュレーションのプリコンパイルされたクエリ
- * @param bool $persisten 接続を維持するかどうか
- */
- static public function registry( $ name, $driver, $dsn, $usr, $pwd, $emulate = false, $persisten = false)
- {
- if (isset(self::$instances[$name])) {
- // 追加された場合インスタンス名がすでに存在する場合、例外がスローされます
- throw new BadMethodCallException("[{$name}] が登録されました");
- }
-
- // 自身をインスタンス化し、配列にプッシュします
- self::$instances [$name] = 新しい self();
- self::$instances[$name]->dsn = $driver . $dsn;
- self::$instances[$name]->username = $usr;
- self::$instances[$name]->パスワード = $pwd;
- self::$instances[$name]->driver = $driver;
- self::$instances[$name]- >isPersisten = (bool)$persisten;
- self::$instances[$name]->isEmulate = (bool)$emulate;
- }
-
- /**
- * PHP データベース オブジェクトを取得します
- *
- * @return PDO
- */
- public function getPDO()
- {
- if ( !$this->pdo) {
- // PDO がインスタンス化されているかどうかを確認し、そうでない場合は最初に PDO をインスタンス化します
- $this->pdo = new PDO($this->dsn, $this->gt; username, $ this->password);
- // エラー モードは PDOException 例外をスローします
- $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- // クエリを有効にするキャッシュ
- $this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, $this->isEmulate);
- // 永続的な接続を有効にする
- $this->pdo->setAttribute(PDO::ATTR_PERSISTENT, $ this->isPersisten );
-
- }
-
- return $this->pdo;
- }
-
- /**
- * データベースドライバー名を取得します
- *
- * @return string
- */
- public function getDriverName()
- {
- return $this->gt;driver;
- }
-
- /* *
- * 取引を開始します
- */
- public function translationBegin()
- {
- $this->isInTransation = $this->getPDO()->beginTransaction();
- }
-
- /**
- * トランザクションを送信する
- */
- public function transationCommit()
- {
- if ($this->isInTransation) {
- $this->getPDO()->commit();
- } else {
- trigger_error('transationBegin は次のようになります) transationCommit') ;
- }
- }
-
- /**
- * トランザクションのロールバック
- * @return bool
- */
- public function translationRollback()
- {
- if ($this->isInTransation) {
- $this->getPDO()-> ;rollBack();
- } else {
- trigger_error('transationRollbackの前にtransationBeginを呼び出す必要があります');
- }
- }
-
- /**
- * 接続がトランザクション内にあるかどうか
- *
- * @return bool
- */
- public function isInTransation()
- {
- return $this->isInTransation;
- }
-
- /**
- * トランザクション内でコールバック関数を実行します
- *
- * @param function $callback匿名関数またはクロージャ関数
- * @param bool $autoRollback 例外発生時に自動的にロールバックするかどうか
- * @throws PDOException
- * @return bool
- */
- public function transationExecute($callback, $autoRollback = true)
- {
- try {
- // トランザクションを開始
- $this->transationBegin();
- // コールバック関数を呼び出す
- if (is_callable($callback)) {
- $callback();
- } else {
- throw new InvalidArgumentException('$callback はコールバック関数である必要があります');
- }
- // トランザクションをコミットします
- return $this->transationCommit();
- } catch(PDOException $pex) {
- // 自動ロールバックが有効な場合, 次に、PDO 例外をキャッチするときに、最初にロールバックしてからスローします
- if ($autoRollback) {
- $this->transationRollback();
- }
- throw $pex;
- }
- }
-
- /**
- * データベースから安全に切断します
- */
- public functiondetach()
- {
- if ($this->pdo) {
- // PDO がインスタンス化されているかどうかを確認し、インスタンス化されている場合は null に設定します
- $this->pdo = null;
- }
- }
-
- /**
- * ブロッククローン
- */
- public function __clone()
- {
- trigger_error('ブロックされた__cloneメソッド、コネクタはシングルトンクラス');
- }
- }
コードをコピー
|