コードをコピー コードは次のとおりです:
/**
* 著者: 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){
終了;
}
}
}
}
复制代码代码如下:tb_member (username, type, dt) 値 ('test', 1, now()) に挿入します
転送モードでは、フィールドと値のパラメータは別々に転送されますが、両方のパラメータの転送の順序が一致している必要があります。これは、順序の乱れや特定のパラメータの漏洩を引き起こす可能性があります。 > 今回既得问题修正,採用mysql独自的挿入语法,同样是上面那機能,就可换成这样的写法
代暗号次:insert into tb_member set username = "test", type = 1, lastlogindt = now() 就像更新一样、完遂然。
②部分パラメータは数组の代わりに使用できます
代码如下: 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);
コードをコピー コードは次のとおりです。
$db-> query('select username,password from tb_member');
$rs = $db->fetchAll();
コードをコピー コードは次のとおりです。
$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 '