データベースの追加、削除、変更、クエリを実装するための PHP の PDO メソッド_PHP チュートリアル

WBOY
リリース: 2016-07-13 09:53:56
オリジナル
858 人が閲覧しました

データベースの追加、削除、変更、クエリを実装するためのPHPのPDOメソッド

PDOは、クラスをカスタマイズせずに、PHPのデフォルト設定でデータベースを操作するために直接使用することができます。 , pdo 有効になっていないため、使用する前に php.ini で有効にする必要があります。

php の PDO サポートを有効にする必要があります。これは php5.1 以降でサポートされています

データベース接続シングルトンを実装するには、静的変数、静的インスタンス化メソッド、プライベート コンストラクター DPDO.php の 3 つの要素があります

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

クラス DPDO{

プライベート $DSN;

プライベート $DBUser;

プライベート $DBPwd;

プライベート $longLink;

プライベート $pdo;

//直接インスタンス化を防ぐためのプライベートコンストラクター

プライベート関数 __construct($dsn, $DBUser, $DBPwd, $longLink = false) {

$this->DSN = $dsn;

$this->DBUser = $DBUser;

$this->DBPwd = $DBPwd;

$this->longLink = $longLink;

$this->connect();

}

//クローン化を防ぐためのプライベート空クローン機能

プライベート関数 __clone(){}

//静的インスタンス化関数は PDO オブジェクトを返します

静的パブリック関数インスタンス($dsn, $DBUser, $DBPwd, $longLink = false){

static $singleton = array();//インスタンス化されたオブジェクトの保存に使用される静的関数

$singIndex = md5($dsn . $DBUser . $DBPwd . $longLink);

if (empty($singleton[$singIndex])) {

$singleton[$singIndex] = 新しい自己($dsn, $DBUser, $DBPwd, $longLink = false);

}

return $singleton[$singIndex]->pdo;

}

プライベート関数 connect(){

試してください{

if($this->longLink){

$this->pdo = 新しい PDO($this->DSN, $this->DBUser, $this->DBPwd, array(PDO::ATTR_PERSISTENT => true));

}その他{

$this->pdo = 新しい PDO($this->DSN, $this->DBUser, $this->DBPwd);

}

$this->pdo->query('SET NAMES UTF-8');

} catch(PDOException $e) {

die('エラー:' . $e->getMessage() . '
');

}

}

}

フィールド マッピングの処理に使用されます。PDO フィールド マッピングを使用すると、SQL インジェクションを効果的に回避できます。

?

DB.phpの追加、削除、変更、チェックの具体的な実装

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

//フィールド連想配列処理。主にデータの書き込みと更新、同じ and or or による条件のクエリ、SQL ステートメントとマップされたフィールドの配列の生成に使用されます

パブリック関数 FDFields($data, $link = ',', $judge = array(), $aliasTable = ''){

$sql = '';

$mapData = array();

foreach($data as $key => $value) {

$mapIndex = ':' . ($link != ',' ? 'c' : '') . $aliasTable .

$sql .= ' ' . ($aliasTable ? $aliasTable . '.' : '') . ''key . ' ' . ($judge[$key] : ' =') . $mapIndex;

$mapData[$mapIndex] = $value;

}

$sql = トリム($sql, $link);

配列を返す($sql, $mapData);

}

//単一フィールドの処理を処理するために使用されます

パブリック関数 FDField($field, $value, $judge = '=', $preMap = 'cn', $aliasTable = '') {

$mapIndex = ':' . $aliasTable .

$sql = ' ' . ($aliasTable . '.' : '') . $field . $mapIndex;

$mapData[$mapIndex] = $value;

配列を返す($sql, $mapData);

}

//Gang メソッドを使用すると、クエリ条件と対応するデータ配列を簡単に生成できます

パブリック関数 FDCondition($condition, $mapData) {

if(is_string($condition)) {

$where = $condition;

} else if (is_array($condition)) {

if($condition['str']) {

if (is_string($condition['str'])) {

$where = $condition['str'];

} 他 {

false を返す;

}

}

if(is_array($condition['data'])) {

$link = $condition['link'] ? $condition['link'] : 'そして';

list($conSql, $mapConData) = $this->FDFields($condition['data'], $link, $condition['judge']);

if ($conSql) {

$where .= ($where ? ' ' . $link : '') . $conSql;

$mapData = array_merge($mapData, $mapConData);

}

}

}

配列を返す($where, $mapData);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

パブリック関数 fetch($sql, $searchData = array(), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) {

if ($sql) {

$sql .= '制限 1';

$pdoStatement = $this->pdo->prepare($sql, $preType);

$pdoStatement->execute($searchData);

return $data = $pdoStatement->fetch($dataMode);

} 他 {

false を返す;

}

}

パブリック関数 fetchAll($sql, $searchData = array(), $limit = array(0, 10), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY) ){

if ($sql) {

$sql .= ' 制限 ' . (int) $limit[0] . ',' . (intval($limit[1]) > 0 ? intval($limit[1]) : 10);

$pdoStatement = $this->pdo->prepare($sql, $preType);

$pdoStatement->execute($searchData);

return $data = $pdoStatement->fetchAll($dataMode);

} 他 {

false を返す;

}

}

パブリック関数 insert($tableName, $data, $returnInsertId = false, $replace = false) {

if(!empty($tableName) && count($data) > 0){

$sql = $replace ? 'REPLACE INTO' : 'INSERT INTO';

list($setSql, $mapData) = $this->FDFields($data);

$sql .= $tableName . $setSql;

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR =>PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet ? ($returnInsertId ? $this->pdo->lastInsertId() : $execRet) : false;

} 他 {

false を返す;

}

}

パブリック関数 update($tableName, $data, $condition, $mapData = array(), $returnRowCount = true) {

if(!empty($tableName) && count($data) > 0) {

$sql = 'UPDATE' .$tableName .

list($setSql, $mapSetData) = $this->FDFields($data);

$sql .= $setSql;

$mapData = array_merge($mapData, $mapSetData);

list($where, $mapData) = $this->FDCondition($condition, $mapData);

$sql .= $where ? ' WHERE ' : '';

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR =>PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet ? ($returnRowCount ? $pdoStatement->rowCount() : $execRet) : false;

} 他 {

false を返す;

}

}

パブリック関数 delete($tableName, $condition, $mapData = array()) {

if(!empty($tableName) && $condition){

$sql = '$テーブル名から削除' .

list($where, $mapData) = $this->FDCondition($condition, $mapData);

$sql .= $where ? ' どこ ' 。 $where : '';

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR =>PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

$execRet を返す;

}

}

测试文件test.php

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

header("コンテンツタイプ: text/html; charset=utf-8");

define('APP_DIR', dirname(__FILE__));

if (function_exists('spl_autoload_register')) {

spl_autoload_register('autoClass');

} 他 {

関数 __auto_load($className){

autoClass($className);

}

}

関数 autoClass($className){

試してください{

require_once APP_DIR.'/class/'.$className.'.php';

} catch (例外 $e) {

die('エラー:' . $e->getMessage() . '
');

}

}

$DB = 新しい DB();

//插入

$inData['a'] = ランド(1, 100);

$inData['b'] = rand(1, 1000);

$inData['c'] = rand(1,200) 。 「。」 。ランド(1,100);

$ret = $DB->insert('a', $inData);

「插入」をエコーし​​ます。 ($ret ? '成功' : '失败') 。 '
';

//更新

$upConData['a'] = 100;

$upConJudge['a'] = '<';

$upConData['b'] = 30;

$upConJudge['b'] = '>';

list($upConStr, $mapUpConData) = $DB->FDField('b', 200, '<', 'gt');

$condition = 配列(

'str' => $upConStr、

'データ' => $upConData、

「裁判官」=> $upConJudge、

'リンク' => 「そして」

);

$upData['a'] = ランド(1, 10);

$upData['b'] = 1;

$upData['c'] = 1.00;

$changeRows = $DB->update('a', $upData, $condition, $mapUpConData);

echo '更新行数:' 。 (int) $changeRows 。 '
';

//删除

$delVal = ランド(1, 10);

list($delCon, $mapDelCon) = $DB->FDField('a', $delVal);

$delRet = $DB->delete('a', $delCon, $mapDelCon);

echo '删除a=' 。 $delVal 。 ($delRet ? '成功' : '失败') 。 '
';

//查询

$data['a'] = '10';

$judge['a'] = '>';

$data['b'] = '400';

$judge['b'] = '<';

list($conSql, $mapConData) = $DB->FDFields($data, 'and', $judge);

$mData = $DB->fetch('select * from a where ' . $conSql . ' order by `a` desc', $mapConData);

var_dump($mData);

以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1000073.html技術記事 phpのPDOメソッドは、データベースの追加、削除、変更、クエリを実現します。 PDOは、クラスをカスタマイズせずに、直接pdoを使用してデータベースを操作することができます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート