プロセス指向とオブジェクト指向\トランザクション制御\バッチ実行\の前を比較することを含む、データベースPHPmysqli仕上げの拡張分析を達成するための動作を終了PHPのMySQL拡張モジュールの基本的なCRUD \ Servicesの\前処理\環境設定を含め、PDO PHP拡張モジュールを仕上げプロセス

関連記事:PHPのMySQLの拡張配置とデータベース分析の動作を実現    PHPmysqliは、比較プロセス指向とオブジェクト指向\トランザクション制御\バッチ実行\前処理を含め、統合を拡張しました

 

入門

PDOは、データベースに接続するPHPプログラムインターフェイスで、PHPプログラムは、PDOを介してデータベースにリンクすることができます。

利点:

  1.ポータビリティは、できるすべての主要なデータベースサービスをサポートし、実装コードはほぼ同じですが、あまりにも多くのバックグラウンドのデータベース操作なしでコードレベルでPDOを使用すると、OracleのMySQLへの移植からプログラムを置くことができます

  2、サポートトランザクション及び前処理等の高度な操作を、効果的にSQLインジェクションを防止することができます

環境設定

上記PHP5.0とは、設定ファイルである必要がありますオープンPDO関連するデータベースの拡張

たとえば、PDOのMySQLのデータベース接続を使用したい、それがPDO_MYSQLエクステンションを開く必要があります

php.iniで拡張-php_pdo_mysql.dllを見つけるには、これはラインの前にセミコロンを削除します

するphpinfo関数は、次いで、以下に示すように成功したオープンを示す内容を表示することなどによって、表示するために使用されます。

 

 

基本的な流れ

PDOは、オブジェクト最初のを作成するためには、データベース接続コンストラクタPDO PDOクラスをパッケージ化する方法を実現することができる対応するパラメータデータベース接続を渡し、クラスをインスタンス化されます。

$ pdoObj = 新しい PDO( "mysqlの:ホスト= localhostの; dbnameに=テスト"、 'ルート'、 'ルート')。

PDOクラスには、すなわち、3つの必須パラメータがあります。データベース駆動型のログインパスワードを

DBNAME =データベース名;ホスト=ホスト名:mysqlの:データベースドライバの異なるタイプの違い、MySQLのドライブのフォーマットが存在します

$ pdoObj - > setAttributeメソッド(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION)。

それはあなたが異常なパターンのデータベースを有効にすることをお勧めします

唯一の異常なパターンを開いて、あなたは通常、PDOException定義の例外を捕捉しますcatchステートメントを試す使用することができます。

$ pdoObj - > setAttributeメソッド(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION)。

DML操作例、昇給Le​​ixiao 6月100:

<?PHPの
 試み{
     $ pdoObj = 新しい PDO( "mysqlの:ホスト= localhostの; dbnameに=テスト;のcharset = UTF-8"、 'ルート'、 'ルート' )。
    $ pdoObj - > setAttributeメソッド(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION)。
} キャッチ(PDOException用の$ P ){
     エコー '数据库连接失败'。$ pを - > のgetMessage(); 
} 
試みる{ 
    $ affect_rows = $ pdoObj - > EXEC( "更新`設定class`給与=給与+ 100ここでSNAME = '雷小军'" )。
   エコー "影响{ $ affect_rows }行" キャッチ(PDOException $電子){
     エコー "错误:"。$電子 - > のgetMessage(); 
}

クエリの例としては、すべてのデータ・テーブル・クラスを照会します:

<?PHPの
 試み{
     $ pdoObj = 新しい PDO( "mysqlの:ホスト= localhostの; dbnameに=テスト;のcharset = UTF8"、 'ルート'、 'ルート' )。
    $ pdoObj - > setAttributeメソッド(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION)。
} キャッチ(PDOException用の$ P ){
     エコー '数据库连接失败'。$ pを - > のgetMessage(); 
} 
してみてください{
     $クエリ = $ pdoObj >クエリ( "クラスから選択*を" - ;)
    一方、$ valを = $クエリ - >(PDOをフェッチ::;
        var_dump$ valの); 
    } 

} キャッチ(PDOExceptionの$電子){
     エコー "错误:"。$電子 - > のgetMessage(); 
}

クエリを実行した後、クエリの結果セットを取得するためにフェッチ()関数を使用して、結果セットのタイプを取得する機能をフェッチパラメータを表します。

PDO :: FETCH_ASSOC:連想配列として結果セットを取得するための代表的な

PDO :: FETCH_NUM:配列インデックスは、結果セットを表し

あなたはそれを埋めるしない場合は、インデックス付き配列と連想配列を取得しています

 

業務

機能達成するための融資プログラム、シェルドンはPenny100ドルを貸す、シェルドン100デポジットは、ペニーの預金プラス100を切断しなければならない、これらの2つの操作がされているか、そして、私たちは、トランザクションを使用する必要があり、成功するか失敗します:

まず、あなたは、SQLステートメントを自動コミットオフにする必要があり、およびトランザクションを開きます。

$ pdoObj - > setAttributeメソッド(PDO :: ATTR_AUTOCOMMIT、0);
$ pdoObj - > のbeginTransaction();

そして、ロールバック、その後、成功した場合、変更をコミットし、2つのUPDATE文を実行し、それが失敗した場合:

$ affect_rows [ 'ボロー'] = $ pdoObj - > EXEC( "更新` class`設定給与= salary- { $多く }ここSNAME = '谢尔顿李库伯'" )。
    $ affect_rows [ '得る'] = $ pdoObj - > EXEC( "更新`給与を設定class` =給与+ { $多く }ここSNAME = '佩妮'" )。
    もし$ affect_rows [ '借用'] && $ affect_rows [ 'get'は]){
         $ pdoObj - > ()をコミット。
    } 
   {
    
$ pdoObj - >)(コミット;
  }

スクリプトの実行後に自動コミットをオンにする必要があります。

$ pdoObj - > setAttributeZ(PDO :: ATTR_AUTOCOMMED、1);

 

<?PHP
 のtry {
     $ pdoObj = 新しい新しい PDO( "MySQLの:ホスト= localhostの; dbnameに=テスト"、 'ルート'、 'ルート' );
     $ pdoObj - > setAttributeメソッド(:: ATTR_ERRMODE PDO、PDO :: ERRMODE_EXCEPTION);
     / / オフ自動送信
    $ pdoObj - > setAttributeメソッド(PDO :: ATTR_AUTOCOMMIT、0 ); 
} キャッチ(PDOException $ P ){
     エコー 'データベース接続の失敗'。$のP - > のgetMessage(); 
} 
試し{
     // 開いているトランザクション
    $ pdoObj - > のbeginTransaction();
     
    $ MANY = 100 ;
     $ affect_rows= 配列( 'ボロー' => 0、=> 0 '得ます' );
    $ affect_rows [ 'ボロー'] = $ pdoObj - > EXEC( "更新` class`設定給与= salary- { $多く }ここSNAME = '谢尔顿李库伯'" )。
    $ affect_rows [ '得る'] = $ pdoObj - > EXEC( "更新`給与を設定class` =給与+ { $多く }ここSNAME = '佩妮'" )。
    もし$ affect_rows [ '借用'] && $ affect_rows [ 'get'は]){
         $ pdoObj - > ()をコミット。エコー "エラー:." $ E - >のgetMessage() '<brの/>'。;
     $ pdoObj - > ROLLBACK();
     エコー "転送失敗" ; 
} 

// 操作の完了後に自動コミットトランザクションを有効にする
$ pdoObj - > setAttributeメソッド(PDO :: ATTR_AUTOCOMMIT、1)。

 

前処理

プリコンパイルを使用して、前処理動作は、大きく、プログラムの効率を向上させるだけでなく、SQLインジェクションを防止します。

ステップ:

1. SQL関数を準備書面で実行される文、パラメータの欠如?フィリング

$ stmtは = $ pdoObjは - >準備( "?????)、、、、(` class`値に挿入します");

2.bindParam機能バインド変数

    $ stmtは - > bindParam(1、$のID );
    $ stmtは - > bindParam(2、$のSNAME )。
    $ stmtは - > bindParam(3、$性別)。
    $ stmtは - > bindParam(4、$社);
    $ stmtは - > bindParam(5、$給与);

3.着信変数と実行

    ID $ = 31である;
     $のSNAME = '富栄' ;
     $性別 = 'M' ;
     $会社 = 'パック' ;
     $給与 = 10000 ;
     $ fanbu = 1000 ;
     $ stmtはは - >()を実行します。

セットのSQLステートメントを複数実行する必要が、単純にステップ3の複数のセットをコピーして、パラメータ値を変更するとき

次のように完全な例は以下のとおりです。

<?PHP
 のtry {
     $ pdoObj = 新しい新しい PDO( "MySQLの:ホスト= localhostの; dbnameに=テスト"、 'ルート'、 'ルート' );
     $ pdoObj - > setAttributeメソッド(:: ATTR_ERRMODE PDO、PDO :: ERRMODE_EXCEPTION); 
} キャッチ(PDOException $ P ){
     エコー 'データベース接続不良' $ P - > ;のgetMessage()
} 
試み{
     // の形で連想配列
    $ STMT = $ pdoObjは ID: - >(「INSERT INTO`のclass`値(PREPARE 、:SNAME ,:性別,:会社,:給料) " );
     $ STMT - > bindParamは("上記ID」は、上記に述べたID $ )。
    $ stmtは- > bindParam( "SNAME"、$のSNAME )。
    $ stmtは - > bindParam( "性別"、$性別)。
    $ stmtは - > bindParam( "会社"、$社);
    $ stmtは - > bindParam( "給与"、$給与);
    $ stmtは - > bindParam( "fanbu"、$のfanbu )。

    $ ID = 31 ;
    $のSNAME = '吕布' ;
    $性別 = '男' $会社 = '群雄' ;
    $給与 = 10000 ;
    $ stmtは - > (実行)。

    $ ID = 32 ;
     $性別 = 'M' ;
     $社 = 'はシュウ' ;
     $給与 = 10000 ;
     $ STMT - > (実行); 

    $ ID = 33であり;
     $ SNAME = 'ウェイド' ;
     $性別 = 'M' ;
     $カンパニー = 'パック' ;
     $給与 = 10000 ;
     $ STMT - > 実行(); 
} キャッチ(PDOException $ E ){
     エコー "エラー:。" $ E - >のgetMessage() '<brの/>' ;
     $ pdoObj - >ROLLBACK();
    エコー「転写不良」; 
}

 

おすすめ

転載: www.cnblogs.com/iszhangk/p/11516889.html
おすすめ