コードをコピー コードは次のとおりです:
/**
* 著者: Hu Rui
* 日付: 2012/07/21
* 電子メール: hooray0905@foxmail.com
*/
class HRDB{
protected $pdo;
保護された $res;
保護された $config;
/*构造関数数*/
function __construct($config){
$this->Config = $config;
$this->connect();
}
/*データ库连接*/
public function connect(){
$this->pdo = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password']);
$this->pdo->query('set names utf8;');
//把握結果順序列化成stdClass
//$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
//自己写代码捕获Exception
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
/*数据库关闭*/
public function close(){
$this->pdo = null;
}
パブリック関数 query($sql){
$res = $this->pdo->query($sql);
if($res){
$this->res = $res;
}
}
public function exec($sql){
$res = $this->pdo->exec($sql);
if($res){
$this->res = $res;
}
}
public function fetchAll(){
return $this->res->fetchAll();
}
public function fetch(){
return $this->res->fetch();
}
public function fetchColumn(){
return $this->res->fetchColumn();
}
public function lastInsertId(){
return $this->res->lastInsertId();
}
/**
* パラメータの説明
* int $debug デバッグを有効にするかどうか、有効な場合は SQL ステートメントが出力されます
* 0 無効
* 1 有効
* 2 有効にして終了しますプログラム
* int $ モードの戻り値の型
* 0 複数のレコードを返します
* 1 単一のレコードを返します
* 2 行数を返します
* 文字列/配列 $table データベース テーブル、2値渡しモード
* 通常 パターン:
* 'tb_member, tb_money'
* 配列パターン:
* array('tb_member', 'tb_money')
* string/array $fieldsクエリ対象のデータベース フィールド。空にすることができます。デフォルトはすべてを検索します。2 つの値渡しモード
* 通常モード:
* 'ユーザー名、パスワード'
* 配列モード:
* array('username', 'password')
* string/array $sqlwhere クエリ条件、空許可、2 つの値渡しモード
* 通常モード:
* '、type = 1、ユーザー名は " %os%"'
* 配列モード :
* array('type = 1', 'username like "%os%"')
* string $orderby sort、デフォルトは ID 逆順
*/
public function select($debug, $mode, $table, $fields="*", $sqlwhere="", $orderby= "tbid desc"){
//パラメータ处処理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($fields)){
$fields = implode(', ', $fields);
}
if(is_array($sqlwhere)){
$sqlwhere = ' および '.implode(' および ', $sqlwhere);
}
//データ库操作
if($debug === 0){
if($mode === 2){
$this->query("select count (未定) $table where 1=1 $sqlwhere") から。
$return = $this->fetchColumn();
}else if($mode === 1){
$this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
$return = $this->fetch();
}else{
$this->query("select $fields from $table where 1=1 $sqlwhere order by $orderby");
$return = $this->fetchAll();
}
return $return;
}else{
if($mode === 2){
echo "select count(tbid) from $table where 1=1 $sqlwhere";
}else if($mode === 1){
echo "$table から $fields を選択します。ここで 1=1 $sqlwhere order by $orderby";
}
else{
echo "$table から $fields を選択します。ここで 1=1 $sqlwhere order by $orderby";
}
if($debug === 2){
終了;
}
}
}
/**
* パラメータの説明
* int $debug デバッグを有効にするかどうか、有効な場合は SQL ステートメントが出力されます
* 0 無効
* 1 有効
* 2 有効にして終了しますプログラム
* int $ モード戻り型
* 0 戻り情報なし
* 1 実行エントリ数を返します
* 2 最後に挿入されたレコードの ID を返します
* string/array $テーブル データベース テーブル、2 つの値渡しモード
* 通常モード:
* 'tb_member, tb_money'
* 配列モード:
* array('tb_member', 'tb_money')
*文字列/配列 挿入される $set フィールドとコンテンツ、2 つの値渡しモード
* 通常モード:
* 'username = "test", type = 1, dt = now()'
* 配列モード:
* array('username = "test"', 'type = 1', 'dt = now()')
*/
public function insert($debug, $mode, $table, $set){
/ /パラメータ处処理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($set)){
$set = implode(', ', $set);
}
//データ库操作
if($debug === 0){
if($mode === 2){
$this->query("insert into $テーブルセット$set");
$return = $this->lastInsertId();
}else if($mode === 1){
$this->exec("$table set $set に挿入");
$return = $this->res;
}else{
$this->query("$table set $set に挿入");
$return = NULL;
}
return $return;
}else{
echo "$table set $set に挿入";
if($debug === 2){
終了;
}
}
}
/**
* パラメータの説明
* int $debug デバッグを有効にするかどうか、有効な場合は SQL ステートメントが出力されます
* 0 無効
* 1 有効
* 2 有効にして終了しますプログラム
* int $ モード戻り型
* 0 戻り情報なし
* 1 実行エントリ数を返す
* string $table データベース テーブル、2 つの値渡しモード
* 通常モード:
* 'tb_member, tb_money '
* 配列モード:
* array('tb_member', 'tb_money')
* 更新する必要がある文字列/配列 $set フィールドと内容、2 つの値-passing モード
* 通常モード:
* 'username = "test"、type = 1、dt = now()'
* 配列モード:
* array('username = "test" ', 'type = 1', 'dt = now()')
* string/array $sqlwhere 条件を変更し、空の 2 つの値渡しモードを許可
* 通常モード:
* ' および type = 1 およびユーザー名 like "%os%"'
* 配列モード:
* array('type = 1', 'ユーザー名 like "%os%"')
*/
public function update($debug, $mode, $table, $set, $sqlwhere="" ){
//パラメータ处処理
if(is_array($table)){
$table = implode(', ', $table);
}
if(is_array($set)){
$set = implode(', ', $set);
}
if(is_array($sqlwhere)){
$sqlwhere = ' および '.implode(' および ', $sqlwhere);
}
//データ库操作
if($debug === 0){
if($mode === 1){
$this->exec("update $テーブルセット $set where 1=1 $sqlwhere");
$return = $this->res;
}else{
$this->query("update $table set $set where 1=1 $sqlwhere");
$return = NULL;
}
return $return;
}else{
echo "update $table set $set where 1=1 $sqlwhere";
if($debug === 2){
終了;
}
}
}
/**
* パラメータの説明
* int $debug デバッグを有効にするかどうか、有効な場合は SQL ステートメントが出力されます
* 0 無効
* 1 有効
* 2 有効にして終了しますプログラム
* int $ モード戻り型
* 0 戻り情報なし
* 1 実行エントリ数を返す
* 文字列 $table データベーステーブル
* 文字列/配列 $sqlwhere 削除条件、空許可される 2 つの値渡しモード
* 通常モード:
* 'および type = 1 および "%os%" のようなユーザー名'
* 配列モード:
* array('type = 1' , 'ユーザー名は "%os %" のようなもの')
*/
public function delete($debug, $mode, $table, $sqlwhere=""){
//パラメータ处処理
if(is_array($sqlwhere)){
$sqlwhere = ' and '.implode(' and ', $sqlwhere);
}
//データ库操作
if($debug === 0){
if($mode === 1){
$this->exec("から削除$table where 1=1 $sqlwhere");
$return = $this->res;
}else{
$this->query("delete from $table where 1=1 $sqlwhere");
$return = NULL;
}
return $return;
}else{
echo "$table where 1=1 $sqlwhere から削除";
if($debug === 2){
終了;
}
}
}
}
其他使用上,和前的位相差不大,目的是為方便移植。重写着重处処理了几个问题:
①挿入语句太复杂,フィールド有値对应容易出现误差
我们看下最常见的一句sql插入语句
复制代码代码如下:tb_member (username, type, dt) 値 ('test', 1, now()) に挿入します
転送モードでは、フィールドと値のパラメータは別々に転送されますが、両方のパラメータの転送の順序が一致している必要があります。これは、順序の乱れや特定のパラメータの漏洩を引き起こす可能性があります。 > 今回既得问题修正,採用mysql独自的挿入语法,同样是上面那機能,就可换成这样的写法
复制代
代暗号次:insert into tb_member set username = "test", type = 1, lastlogindt = now() 就像更新一样、完遂然。
②部分パラメータは数组の代わりに使用できます
比如这样一句sql
复制代
代码如下: delete from tb_member where 1=1 and tbid = 1 and username = "hooray" 在原先调使用方法的時候,需要手動拼装好処条件,这样操作的本很高,现在完全可用种形式
复制代码
代码如下: $where = array( 'tbid = 1',
'ユーザー名 = "やったー"');
$db->delete(1, 0, 'tb_member', $where);
さらに多くの条件もまた、誤った思考回路に遭遇しない。 🎜>
代码如下:
$set = array('username = "123"', 'type = 1', 'lastlogindt = now()');
$where = array('tbid = 1'); 🎜>$db->update(1, 0, 'tb_member', $set, $where);
場合によってはSQLもそうですこのとき、実行のために組み立てた SQL ステートメントを直接渡して情報を返す関数が必要です。現在、この機能も利用可能です
コードをコピー コードは次のとおりです。
$db-> query('select username,password from tb_member');
$rs = $db->fetchAll();
④ 複数のデータベース接続の作成をサポート
オリジナルの方法は単なるデータベース操作方法なので、実装では同じファイルを 2 つコピーして変更する必要があります。いくつかの変数の操作は非常に複雑です。この問題は現在解決されています。
コードをコピー コードは次のとおりです。
$db_hoorayos_config = array(
'dsn'= >' mysql:host=localhost;dbname=hoorayos',
'name'=>'root',
'password'=>'hooray'
); new HRDB( $db_hoorayos_config);
$db_hoorayos_config2 = array(
'dsn'=>'mysql:host=localhost;dbname=hoorayos2',
'name'=> ',
'password'=>'hooray'
);
$db2 = new HRDB($db_hoorayos_config2);
このようにして、2 つのデータベース接続が可能になります。データベース間の相互作用の処理を容易にするために、同時に作成されます。
以上が新機能のすべてであり、コード全体はそれほど多くありません。読んで理解することを歓迎します。以下は私が執筆時に書いたテストコードであり、皆様の便宜のためにも提供されています。
コードをコピーします コードは次のとおりです。
require_once('global.php'); require_once(' inc/setting.inc.php');
$db = new HRDB($db_hoorayos_config);
echo '
select test> ;< ;hr>';
echo '通常モード、文字列を直接渡します
';
$rs = $db->select(1, 0, 'tb_member', 'ユーザー名, パスワード) ' , ' そして type = 1 と "%os%" のようなユーザー名');
echo '
配列モード、配列を渡すことができます
';
$fields = array('ユーザー名' , 'パスワード');
$where = array('type = 1', 'ユーザー名は "%os%" のようなもの'); 'tb_member ', $fields, $where);
echo '
insert test
';
echo '通常モード、直接文字列転送
$db->insert(1, 0, 'tb_member', 'username = "test", type = 1, lastlogindt = now()') と入力します。
echo '< ; br>配列モードでは、配列を渡すことができます
';
$set = array('username = "test"', 'type = 1', 'lastlogindt = now()'); $db->insert(1, 0, 'tb_member', $set);
echo '
更新テスト
echo '通常モード、文字列を直接渡します
';
$db->update(1, 0, 'tb_member', 'username = "123", type = 1, lastlogindt = now( )', 'および tbid = 7');
echo '
配列モードで渡すことができます
';
$set = array('username = "123"', ' type = 1', 'lastlogindt = now()');
$where = array('tbid = 1');
$db->update(1, 0, 'tb_member', $set, $where );
echo '
delete test
';
echo '$db->delete(1, 0, 'tb_member', 'and tbid = 1 and username = "hooray"');
echo '
配列モードでは、配列を渡すことができます。 br>';
$where = array(
'tbid = 1',
'ユーザー名 = "hooray"'
); 'tb_member', $where);
echo '
custom sql
';
$db->query(' ユーザー名を選択, tb_member からのパスワード');
$db->fetchAll();
$db->close(); >
著者:胡瑞

PHP作为一种流行的Web开发语言,已经被使用了很长时间。PHP中集成的PDO(PHP数据对象)类是我们在开发Web应用程序过程中与数据库进行交互的一种常用方法。但是,一些PHP开发者经常遇到的问题是,当使用PDO类与数据库进行交互时,他们会收到这样的错误:PHPFatalerror:CalltoundefinedmethodPDO::prep

PHP作为一种流行的编程语言,在Web开发领域中有着广泛的应用。其中,PHP的PDO_PGSQL扩展是一种常用的PHP扩展,它提供了与PostgreSQL数据库的交互接口,可以实现PHP与PostgreSQL之间的数据传输和交互。本文将详细介绍如何使用PHP的PDO_PGSQL扩展。一、什么是PDO_PGSQL扩展?PDO_PGSQL是PHP的一个扩展库,它

PHP和PDO:如何执行批量插入和更新导言:在使用PHP编写数据库相关的应用程序时,经常会遇到需要批量插入和更新数据的情况。传统的做法是使用循环来执行多次数据库操作,但这样的方法效率较低。PHP的PDO(PHPDataObject)提供了一种更高效的方法来执行批量插入和更新操作,本文将介绍如何使用PDO来实现批量插入和更新。一、PDO简介:PDO是PH

PHP和PDO:如何处理数据库中的JSON数据在现代web开发中,处理和存储大量数据是一个非常重要的任务。随着移动应用和云计算的普及,越来越多的数据以JSON(JavaScriptObjectNotation)格式存储在数据库中。PHP作为一种常用的服务器端语言,它的PDO(PHPDataObject)扩展提供了一种方便的方式来处理和操作数据库。本

PHP和PDO:如何进行分页查询和显示数据在开发Web应用程序时,分页查询和显示数据是一个非常常见的需求。通过分页,我们可以一次显示一定数量的数据,提高页面加载速度和用户体验。在PHP中,使用PHP数据对象(PDO)库可以轻松实现分页查询和显示数据的功能。本文将介绍如何在PHP中使用PDO进行分页查询和显示数据,并提供相应的代码示例。一、创建数据库和数据表

如何使用PDO连接到Redis数据库Redis是一个开源的高性能、内存存储的键值数据库,常用于缓存、队列等场景。在PHP开发中,使用Redis可以有效提升应用的性能和稳定性。而通过PDO(PHPDataObjects)扩展,我们可以更方便地连接和操作Redis数据库。本文将介绍如何使用PDO连接到Redis数据库,并附带代码示例。安装Redis扩展在开始

PHP和PDO:如何执行数据库备份和还原操作在开发Web应用程序时,数据库的备份和还原是非常重要的任务。PHP作为一门流行的服务器端脚本语言,提供了丰富的库和扩展,其中PDO(PHP数据对象)是一款强大的数据库访问抽象层。本文将介绍如何使用PHP和PDO来执行数据库备份和还原操作。第一步:连接数据库在实际操作之前,我们需要建立与数据库的连接。使用PDO对

如何使用PDO绑定和获取绑定参数值在开发Web应用程序时,处理数据库查询是很常见的任务之一。为了保证应用程序的安全性和可靠性,我们应该使用参数绑定来处理SQL查询,而不是直接将变量值插入SQL语句中。PDO(PHP数据对象)提供了一种方便且安全的方式来绑定参数和获取绑定参数的值。下面,我们将介绍如何使用PDO进行参数绑定和获取绑定参数的


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









