関連記事: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操作例、昇給Leixiao 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(); エコー「転写不良」; }