PHPのPDOの詳しい説明

WBOY
WBOYオリジナル
2016-06-20 12:47:041026ブラウズ

PDO は、さまざまなデータベース (MySQL、MSSQL、Oracle、DB2、PostgreSQL...) のアクセス インターフェイスを統合し、異なるデータベース間を簡単に切り替えて、データベース間の移行を行うことができる「データベース アクセス抽象化レイヤー」です。実装が簡単です。

一般的な PDO メソッド:
PDO::query() は主に、記録された結果が返される操作 (PDOStatement)、特に選択操作に使用されます。
PDO::exec() は主に、結果セットを返さない操作用です。挿入、更新、その他の操作など。影響を受ける行の数を返します。
PDO::lastInsertId() は最後の挿入操作の最後の ID を返しますが、注意してください: tb(col1,col2) に挿入すると、values(v1,v2),(v11,v22).. 複数のレコードの場合、lastinsertid() は、最後に挿入されたレコードのレコード ID ではなく、最初の (v1、v2) 挿入の ID のみを返します。
PDOStatement::fetch() はレコードを取得するために使用されます。 while を使用してトラバースします。
PDOStatement::fetchAll() は、すべてのレコードを 1 つにフェッチします。
PDOStatement::fetchcolumn([int column_indexnum]) は、列に直接アクセスするために使用されます。パラメーター column_indexnum は、0 から始まる行の列のインデックス値です。ただし、このメソッドは同じ列の 1 つの列しか取得できません。一度に 1 行ずつ実行し、次の行にジャンプします。したがって、特定の列に直接アクセスする場合には使いやすいですが、複数の列を横断する場合には役に立ちません。
PDOStatement::rowcount() は、query("select...") メソッドの使用時にレコード数を取得するのに適しています。前処理にも使用できます。 $stmt->rowcount();
PDOStatement::columncount() は、query("select...") メソッドの使用時にレコード内の列数を取得するのに適しています。

注:
1. fetch または fetchall を選択しますか?
レコード セットが小さい場合、fetchall を使用すると効率が良く、データベースからの取得回数が減ります。ただし、結果セットが大きい場合、fetchall を使用するとシステムに大きな負担がかかります。データベースが WEB フロントエンドに送信する必要があるデータの量が多すぎるため、非効率的です。
2. fetch() または fetchall() にはいくつかのパラメータがあります:
mixed pdostatement::fetch([int fetch_style [,int Cursor_orientation [,int Cursor_offset]]])
array pdostatement::fetchAll( int fetch_style)

fetch_style パラメータ:
■$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTH はデフォルトで、省略可能で、関連付けとインデックスを返します。
■$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOC パラメーターは、連想配列のみが返されることを決定します。
■$row=$rs->fetchAll(PDO::FETCH_NUM); インデックス配列を返します
■$row=$rs->fetchAll(PDO::FETCH_OBJ); object 、 fetchall() の場合、オブジェクト

インスタンスの 2 次元配列を返します:

<?php try{ $dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $dbh->exec("SET CHARACTER SET utf8"); /*添加*/ $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>'king',':password'=>'123')); echo $dbh->lastinsertid(); /*修改*/ $sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9')); echo $stmt->rowCount(); /*删除*/ $sql = "DELETE FROM `user` WHERE `login` LIKE 'ke'"; $stmt = $dbh->prepare($sql); $stmt->execute(); echo $stmt->rowCount(); /*查询*/ $login = 'kevi'; $sql = "SELECT * FROM `user` WHERE `login` LIKE :login"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login)); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ print_r($row); } print_r( $stmt->fetchAll(PDO::FETCH_ASSOC)); $dbh=null; //断开连接 }catch(PDOException$e){ print"Error!:".$e->getMessage()."<br/>"; die(); } ?> 

トランザクション:

<?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', ''); $dbh->query('set names utf8;'); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $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(); } catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage(); } ?> 

トラブルシューティング:

$sth = $dbh->prepare('select * from db where SN = :SN'); $sth->bindParam(':SN',$value[SN]); $sth->execute(); if ($sth->errorCode()) { echo "有错误!有错误!"; print_r($sth->errorInfo()); } 

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。