現時点では、「データベース抽象化レイヤー」を実装するには長い道のりがあります。PDO のような「データベース アクセス抽象化レイヤー」を使用するのが良い選択です。
PDO には 3 つの事前定義クラスが含まれています
PDO には、PDO、PDOStatement、および PDOException という 3 つの事前定義クラスが含まれています。
1. PDO
PDO->beginTransaction() — ロールバックの開始点をマークします
PDO->commit() — ロールバックの終了点をマークして SQL を実行します
PDO->__construct() — PDO インスタンスを作成しますリンクされたデータベースの
PDO->errorCode() — エラー コードを取得します
PDO->errorInfo() — エラー情報を取得します
PDO->exec() — SQL ステートメントを処理し、影響を受けるエントリの数を返します
PDO-> ;getAttribute() — 「データベース接続オブジェクト」の属性を取得します
PDO->getAvailableDrivers() — 有効な PDO ドライバー名を取得します
PDO->lastInsertId() — 最後に書き込まれたデータの主キー値を取得します
PDO-> ;prepare() — 「クエリ オブジェクト」を生成します
PDO->query() — SQL ステートメントを処理し、「PDOStatement」を返します
PDO->quote() — 特定の SQL の文字列に引用符を追加します
PDO ->rollBack() — ロールバックを実行します
PDO->setAttribute() — 「データベース接続オブジェクト」の属性を設定します
2. PDOStatement
PDOStatement->bindColumn () — 列を PHP 変数にバインドします
PDOStatement->bindParam() — パラメータを指定された変数名にバインドします
PDOStatement->bindValue() — 値をパラメータにバインドします
PDOStatement->closeCursor() — カーソルを閉じて、ステートメントを実行できるようにしますagain.
PDOStatement->columnCount() — 結果セット内の列の数を返します
PDOStatement->errorCode() — ステートメント ハンドルの最後の操作に関連付けられた SQLSTATE をフェッチします
PDOStatement->errorInfo() —ステートメントハンドルの最後の操作に関連付けられた拡張エラー情報を取得します
PDOStatement->execute() — 準備されたステートメントを実行します
PDOStatement->fetch() — 結果セットから次の行をフェッチします
PDOStatement->fetchAll( ) — 結果セットのすべての行を含む配列を返します
PDOStatement->fetchColumn() — 結果セットの次の行から 1 つの列を返します
PDOStatement->fetchObject () — 次の行をフェッチして次のように返しますobject.
PDOStatement->getAttribute() — ステートメントの属性を取得します
PDOStatement->getColumnMeta() — 結果セット内の列のメタデータを返します
PDOStatement-> nextRowset() — ステートメント内の次の行セットに進みます複数行セットステートメントハンドル
PDOStatement->rowCount() — 最後の SQL ステートメントによって影響を受ける行数を返します
PDOStatement->setAttribute() — ステートメント属性を設定します
PDOStatement->setFetchMode() — デフォルトを設定しますこのステートメントのフェッチ モード
PDO は、さまざまなデータベースのアクセス インターフェイスを統合する「データベース アクセス抽象化レイヤー」です。mysql や mysqli の関数ライブラリと比較して、ADODB や MDB2 と比較してクロスデータベースの使用が容易になります。 , PDO の方が効率的です。現時点では、「データベース抽象化レイヤー」の実装には長い道のりがあります。PDO などの「データベース アクセス抽象化レイヤー」を使用するのが良い選択です。
PDO には 3 つの事前定義クラスが含まれています
PDO には、PDO、PDOStatement、および PDOException という 3 つの事前定義クラスが含まれています。
1. PDO
PDO->beginTransaction() — ロールバックの開始点をマークします
PDO->commit() — ロールバックの終了点をマークして SQL を実行します
PDO->rollBack() — ロールバックを実行します
PDO->__construct() — PDO リンク データベースのインスタンスを作成します
PDO->errorCode() — エラー コードを取得します
PDO->errorInfo() — エラー情報を取得します
PDO->exec() — SQL ステートメントを処理し、影響を受けるエントリの数を返します
PDO->getAttribute() — 「データベース接続オブジェクト」の属性を取得します
PDO->getAvailableDrivers() — 有効な PDO ドライバー名を取得します
PDO-> lastInsertId() — 最後に書き込まれたデータの主キー値を取得します
PDO->prepare() — 「クエリ オブジェクト」を生成します
PDO->query() — SQL ステートメントを処理し、「PDOStatement」を返します
PDO->quote() — SQL の文字列に引用符を追加します
PDO->setAttribute() — 「データベース接続オブジェクト」の属性を設定します
詳しい説明 1) PDO でのデータベース接続
$ dsn = 'mysql :dbname=ent;host=127.0.0.1′;
$user = 'root';
$password = '123456';
try {
$dbh = new PDO($dsn, $user, $password , array(PDO) ::ATTR_PERSISTENT => true));
$dbh->query('set names utf8;');
foreach ($dbh->query('SELECT * from tpm_juese') as $row ) {
print_r ($row);
}
} catch (PDOException $e) {
echo '接続に失敗しました: ' $e->getMessage();
}
多くの Web アプリケーションは、データベースへの永続的な接続を使用して最適化されます。永続接続はスクリプトの終了時に閉じられず、別のスクリプトが同じ ID で接続を要求したときにキャッシュされ、再利用されます。
永続的な接続のキャッシュにより、スクリプトがデータベースと通信する必要があるたびに新しい接続をデプロイするリソースの消費を回避できるため、Web アプリケーションが高速になります。
上記の例の配列 (PDO::ATTR_PERSISTENT => true) は、接続タイプを永続接続に設定します。
PDO->beginTransaction()、PDO->commit()、PDO->rollBack()は、ロールバック機能がサポートされている場合に併用されます。 PDO->beginTransaction() メソッドは開始点をマークし、PDO->commit() メソッドはロールバックの終了点をマークして SQL を実行し、PDO->rollBack() はロールバックを実行します。
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', ”);
$dbh->query('set names utf8;');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->exec(”INSERT INTO `test`.`table` (` name` ,`age`)VALUES ('mick', 22);");
$dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('lily ', 29);");
$dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");
$dbh ->commit();
$dbh->rollBack();
echo "失敗しました: " . $e->getMessage();
}
?>
PDO を介して接続を確立したので、クエリをデプロイする前に、トランザクションを初めて使用する場合は、PDO が提供する 4 つの主な機能 (原子性、一貫性、分離性、耐久性) を理解する必要があります。 ACID) 平たく言えば、トランザクション内のすべての作業が送信されると、段階的に実行される場合でも、安全にデータベースに適用され、他の接続によってトランザクション作業が中断されることもありません。トランザクションの一般的な使用法は、バッチの変更を「保存」し、すぐに実行することです。つまり、トランザクションにより、スクリプトがより高速になり、より堅牢になる可能性があります。 (この利点を実現するには、依然としてそれらを正しく使用する必要があります)
PDOStatement->bindColumn() — 列を PHP 変数にバインドします
PDOStatement->bindParam() — パラメータを指定された変数名にバインドします
PDOStatement->bindValue() — 値をパラメータにバインドします
PDOStatement ->closeCursor() — カーソルを閉じて、ステートメントを再度実行できるようにします。
PDOStatement->columnCount() — 結果セット内の列の数を返します。
PDOStatement->errorCode() — 関連する SQLSTATE を取得します。ステートメントハンドルの最後の操作を使用して
PDOStatement->errorInfo() — ステートメントハンドルの最後の操作に関連付けられた拡張エラー情報を取得します
PDOStatement->execute() — 準備されたステートメントを実行します
PDOStatement->fetch( ) — 結果セットから次の行をフェッチします
PDOStatement->fetchAll() — 結果セットのすべての行を含む配列を返します
PDOStatement->fetchColumn() — 結果セットの次の行から単一の列を返します
PDOStatement->fetchObject() — 次の行をフェッチし、オブジェクトとして返します。
PDOStatement->getAttribute() — ステートメントの属性を取得します。
PDOStatement->getColumnMeta() — 結果内の列のメタデータを返します。 set
PDOStatement->nextRowset() — 複数行セットステートメントハンドルの次の行セットに進みます
PDOStatement->rowCount() — 最後の SQL ステートメントの影響を受けた行数を返します
PDOStatement->setAttribute() — ステートメント属性を設定します
PDOStatement->setFetchMode() — このステートメントのデフォルトのフェッチ モードを設定します
三、PDOException
PDO は 3 つの異なる错误処理方針を提供します。
1. PDO::ERRMODE_SILENT
これは使用が認められているモードです。PDO はステートメントとデータベース オブジェクトに個別のエラー通知番号を設定することがあり、PDO->errorCode() メソッドと PDO->errorInfo() メソッドを使用してエラーを検出できます。ステートメント オブジェクトの使用中にエラーが発生する場合は、そのオブジェクトで PDOStatement->errorCode() または PDOStatement->errorInfo() メソッドを使用してエラー情報を取得できます。
2. 結果として、このデータベース オブジェクトでは 2 つの方法が使用されます。 PDO::ERRMODE_WARNING
は、プログラムを中断せずに問題の発生を確認した場合に限り、セキュリティの除去および調整時に E_WARNING 情報を発行するのに役立ちます。の流れの説明。
3. PDO::ERRMODE_EXCEPTION
は、セキュリティー番号を設定する付属要素として、PDO が PDOException を発生し、セキュリティー番号とセキュリティー情報を反映するプロパティを設定します。 (注意: 頻繁にグラフィックが中断される場合、処理は自動的に復帰します。)
常用モードも非常に便利です。以前に使用されていた PHP バージョンのセキュリティ プロセス構造よりもより明確なセキュリティ プロセス構造を使用でき、安静モードを使用した場合よりも少ないコードとプラグインを使用でき、各データベース アクセスの戻り値をより明確に検査することもできます。戻り値。
PHP での一般的な詳細については、例外の章を参照してください。
PDO は、SQL-92 SQLSTATE に基づいた問題のある文字列を使用します。特定の PDO 制御は、自分自身の番号を適切な SQLSTATE 番号に対応させます。PDO->errorCode () メソッドは、単一の SQLSTATE 番号のみを返します。 あるセキュリティに関する情報が必要な場合、PDO には PDO->errorInfo() メソッドも用意されており、SQLSTATE 番号、特定のデータベース番号を含むメソッドを返すことができます。
// 修正されたセキュリティ通知番号と特定のデータベースで制御されるセキュリティ通知文字列
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING) ;
?> ;
プロパティ列表:
PDO::PARAM_BOOL
はブール型を表します
PDO::PARAM_NULL
はSQLのNULL型を表します
PDO::PARAM_INT
はSQLのINTEGER型を表します
PDO::PARAM_STR
はSQLのSQL CHAR、VARCHAR型を表します
PDO::PARAM_LOB
は、SQL のラージ オブジェクト タイプを表します。
PDO::PARAM_STMT
は、まだサポートされていない SQL のレコードセット タイプを表します。
PDO::PARAM_INPUT_OUTPUT
パラメータがストアド プロシージャの INOUT パラメータであることを指定します。この値は、明示的な PDO::PARAM_* データ型とビットごとに OR 演算する必要があります。
PDO::FETCH_LAZY
結果の各行をオブジェクトとして返します
PDO::FETCH_ASSOC
キー値を添字として含むクエリのみを返します 結果セット、同じ名前のデータは 1 つだけを返します
PDO::FETCH_NAMED
キー値を添字とするクエリの結果セットのみを返します、同じ名前のデータは配列の形式で返されます
PDO::FETCH_NUM
数字を添字にした結果セットのみを返します クエリの結果セット
PDO::FETCH_BOTH
キー値と数字を添字にしたクエリの結果セットを同時に返します
PDO::FETCH_OBJ
結果を返しますオブジェクトの形式で設定
PDO::FETCH_BOUND
PDOStatement::bindParam()を配置 PDOStatement::bindColumn()にバインドされた値は、代入後に変数名として返されます
PDO::FETCH_COLUMN
は、特定の値のみを意味します。
PDO::FETCH_CLASS
は、結果セットがクラスの形式で返されることを意味します。
PDO:: FETCH_INTO
は、データを既存のクラスにマージして返すことを意味します
PDO:: FETCH_FUNC
PDO::FETCH_GROUP
PDO::FETCH_UNIQUE
PDO::FETCH_KEY_PAIR
最初のキー値テーブルと次の数値テーブルテーブルの形式で返されます結果セット
PDO::FETCH_CLASSTYPE
PDO::FETCH_SERIALIZE
はデータをマージすることを意味します既存のクラスをシリアル化して戻します
PDO::FETCH_PROPS_LATE
PHP 5.2.0 以降で利用可能
PDO::ATTR_AUTOCOMMIT
true に設定 時間になると、PDO は自動的にコミッションの受け入れを停止し、
PDO::ATTR_PREFETCH の実行を開始しようとします
アプリケーションが取得するデータサイズを事前に設定します
PDO::ATTR_TIMEOUT
接続データベースのタイムアウト値を設定します
PDO::ATTR_ERRMODE
エラー処理モードを設定します
PDO::ATTR_SERVER_VERSION
読み取り専用PDO 接続のサーバー側データベースのバージョンを示す属性
PDO::ATTR_CLIENT_VERSION
PDO 接続のクライアント側 PDO ドライバーのバージョンを示す読み取り専用属性
PDO::ATTR_SERVER_INFO
メタデータを示す読み取り専用属性PDO に接続されているサーバーの情報
PDO::ATTR_CONNECTION_STATUS
PDO::ATTR_CASE
列形式の PDO::CASE_* のコンテンツによる操作
PDO::ATTR_CURSOR_NAME
ポインター名の取得または設定
PDO::ATTR_CURSOR
ポインターのタイプを設定します。PDO は PDO::CURSOR_FWDONLY および PDO::CURSOR_FWDONLY をサポートするようになりました
PDO::ATTR_DRIVER_NAME
使用される PDO ドライバーの名前を返します
PDO::ATTR_ORACLE_NULLS
SQL の既存の接続を取得しますNULL
PDO::ATTR_PERSISTENT
PDO::ATTR_STATEMENT_CLASS
PDO::ATTR_FETCH_CATALOG_NAMES
返された結果セットでは、フィールド名の代わりにカスタム カタログ名を使用します。
PDO::ATTR_FETCH_TABLE_NAMES
返された結果セットではフィールド名の代わりにカスタム テーブル名を使用します。
PDO::ATTR_STRINGIFY_FETCHES
PDO::ATTR_MAX_COLUMN_LEN
PDO::ATTR_DEFAULT_FETCH_MODE
PHP 5.2.0以降で利用可能
PDO::ATTR_EMULATE_PREPARES
PHP 5.1.3以降で利用可能
PD O::ER RMODE_SILENT
エラーが発生する、デフォルト値です
PDO::ERRMODE_WARNING
エラーが発生したときにphp E_WARNINGメッセージを送信します
PDO::ERRMODE_EXCEPTION
エラーが発生したときにPDOExceptionをスローします
PDO::CASE_NATURAL
返信列のデフォルトの表示形式
PDO::CASE_LOWER
列名を強制的に小文字にする
PDO::CASE_UPPER
列名を強制的に大文字にする
PDO::NULL_NATURAL
PDO::NULL_EMPTY_STRING
PDO::NULL_TO_STRING
PDO::FETCH_ORI_NEXT
データの次の行を取得する結果セット内、ポインタがある場合のみ有効
PDO::FETCH_ORI_PRIOR
関数を使用する場合に有効 結果セット内のデータの前の行を取得する、ポインタ関数がある場合のみ有効
PDO::FETCH_ORI_FIRST
最初の行を取得結果セット内のデータの行、ポインター関数がある場合のみ有効
PDO::FETCH_ORI_LAST
結果セット内のデータの最後の行を取得します、ポインター関数が使用可能な場合のみ有効
PDO::FETCH_ORI_ABS
特定の値を取得結果セット内のデータの行、ポインター関数が使用可能な場合にのみ有効です
PDO::FETCH_ORI_REL
結果セット内の現在の行を取得した後、特定の行のデータはポインター関数がある場合にのみ有効です
PDO:: CURSOR_FWDONLY
逆方向のみに使用できるポインタ操作オブジェクトを作成
PDO::CURSOR_SCROLL
ポインタ操作オブジェクトを作成し、その内容をPDO::FETCH_ORI_*に渡す
結果セットを制御する
PDO::ERR_NONE(文字列)
エラーを設定するエラーがない場合のメッセージ
PDO::PARAM_EVT_ALLOC
割り当てイベント
PDO::PARAM_EVT_FREE
割り当て解除イベント
PDO::PARAM_EVT_EXEC_PRE🎜準備されたステートメントの実行前にトリガーされるイベント。
PDO::PARAM_EVT_EXEC_POST
準備されたステートメントの実行後にトリガーされるイベント。
PDO::PARAM_EVT_FETCH_PRE
レスを取得する前にトリガーされるイベント結果セットからの ult。
PDO::PARAM_EVT_FETCH_POST
イベント結果セットから結果を取得した後にトリガーされます。
PDO::PARAM_EVT_NORMALIZE
バインドされたパラメーターの登録中にトリガーされ、ドライバーがパラメーター名を正規化できるようにするイベントです。关注PHP中文网!