新しい PDO データベース操作 php バージョン (Mysql にのみ適用可能)
コードをコピー コードは次のとおりです:
/**
* 著者: 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(); >
著者:胡瑞

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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