シンプルで実用的なphp操作mysqlデータベースクラス、シンプルで実用的なmysql この記事の例では、mysql データベースを操作するためのシンプルで実用的な PHP クラスについて説明します。参考のためにみんなで共有してください。詳細は以下の通りです コードをコピーします コードは次のとおりです: /* このデータベース接続クラスは、SQL アンチインジェクション関数を自動的にロードし、いくつかの機密性の高い SQL クエリ キーワードをフィルタリングします。また、データベース内のすべてのテーブル名を取得するためのテーブル ステータスの表示やテーブル クラスの表示などの判断フィールドを追加することもできます。 。 */ @ini_set('mysql.trace_mode','off'); クラスmysql { パブリック $dblink パブリック $pconnect private $search = array('/union(s*(/*.**/)?s*)+select/i', '/load_file(s*(/*.**/)?s*)+( /i', '/into(s*(/*.**/)?s*)+outfile/i'); private $replace = array('union select', 'load_file (', 'into outfile'); プライベート $rs; 関数 __construct($hostname,$username,$userpwd,$database,$pconnect=false,$charset='utf8') { define('allowed_htmltags', 'gt;< ;ul>'); $this->pconnect=$pconnect $this->dblink=$pconnect?mysql_pconnect($hostname,$username,$userpwd):mysql_connect($hostname,$username,$userpwd); (!$this->dblink||!is_resource($this->dblink)) && Fatal_error("データベースへの接続に失敗しました!"); @mysql_unbuffered_query("セット名 {$charset}"); if($this->version()>'5.0.1') { @mysql_unbuffered_query("set sql_mode = ''"); } @mysql_select_db($database) または Fatal_error("テーブルを選択できません!"); $this->dblink を返す } 関数クエリ($sql,$unbuffered=false) { //エコー $sql.''; $this->rs=$unbuffered?mysql_unbuffered_query($sql,$this->dblink):mysql_query($sql,$this->dblink); //(!$this->rs||!is_resource($this->rs)) && fat_error("クエリの実行に失敗しました! error:".mysql_error()); if(!$this->rs)fatal_error('SQL ステートメント '.$sql.':' の実行中に次のエラーが発生しました。'.mysql_error()); $this->rs を返す } 関数 fetch_one($sql) { $this->rs=$this->クエリ($sql); dircms_strips チュートリアルを返します lashes($this->filter_pass(mysql_fetch_array($this->rs,mysql_assoc))); } function get_maxfield($filed='id',$table) // $table テーブルの $filed フィールドの最大値を取得します { $r=$this->fetch_one("select {$table}.{$filed} from `{$table}` order by `{$table}`.`{$filed}` desc limit 0,1") ; $r[$filed] を返します } 関数 fetch_all($sql) { $this->rs=$this->クエリ($sql); $結果=配列(); while($rows=mysql_fetch_array($this->rs,mysql_assoc)) { $結果[]=$行 } mysql_free_result($this->rs); dircms_stripslashes($this->filter_pass($result)) を返します } 関数 fetch_all_withkey($sql,$key='id') { $this->rs=$this->クエリ($sql); $結果=配列(); while($rows=mysql_fetch_array($this->rs,mysql_assoc)) { $result[$rows[$key]]=$rows; } mysql_free_result($this->rs); dircms_stripslashes($this->filter_pass($result)) を返します } 関数 last_insert_id() { if(($insertid=mysql_insert_id($this->dblink))>0)return $insertid; else //auto_increment のカラム型が bigint の場合、mysql_insert_id() によって返される値は正しくありません { $result=$this->fetch_one('insertid として last_insert_id() を選択'); $result['insertid'] を返します } } 関数挿入($tbname,$varray,$replace=false) { $varray=$this->escape($varray); $tb_fields=$this->get_fields($tbname); // アップグレードして、フィールドが存在するかどうかを判断する関数を追加します foreach($varray as $key => $value) { if(in_array($key,$tb_fields)) { $filds[]='`'.$key.'`'; $values[]=is_string($value)?'''.$value.''':$value; } } if($fileds) { $fileds=implode(',',$fileds); $fileds=str_replace(''','''',$fileds); $values=implode(',',$values); $sql=$replace?"{$tbname}({$fileds}) の値 ({$values}) に置き換えます":"{$tbname}({$fileds}) の値 ({$values}) に挿入します"; $this->query($sql,true); $this->last_insert_id(); を返す } それ以外の場合は false を返します。 } 関数 update($tbname, $array, $where = '') { $array=$this->escape($array); if($where) { $tb_fields=$this->get_fields($tbname); // 增加判断字段の有無 $sql = ''; foreach($array as $k=>$v) { if(in_array($k,$tb_fields)) { $k=str_replace('','',$k); $sql .= ", `$k`='$v'"; } } $sql = substr($sql, 1); if($sql)$sql = "`$tbname` を更新、$sql を設定、$where"; それ以外の場合は true を返します。 } それ以外は { $sql = "`$tbname`(`".implode('`,`', array_keys($array))."`) 値('".implode("','", $array) に置き換えます。" ')"; } return $this->query($sql,true); } 関数 mysql_delete($tbname,$idarray,$filedname='id') { $idwhere=is_array($idarray)?implode(',',$idarray):intval($idarray); $where=is_array($idarray)?"{$tbname}.{$filedname} in ({$idwhere})":" {$tbname}.{$filedname}={$idwhere}"; return $this->query("{$tbname} where {$where}から削除",true); } 関数 get_fields($table) { $fields=array(); $result=$this->fetch_all("`{$table}` の列を表示"); foreach($result as $val) { $fields[]=$val['フィールド']; } $fields を返します。 } 関数 get_table_status($database) { $status=array(); $r=$this->fetch_all("`".$database."`" からテーブルのステータスを表示); /////// show table ステータスの特性は show table と同様ですが、各テーブルに大量の情報を提供できます。 foreach($r を $v として) { $status[]=$v; } $statusを返します。 } 関数 get_one_table_status($table) { return $this->fetch_one("'$table' のようなテーブルのステータスを表示"); } function create_fields($tbname,$fieldname,$size=0,$type='varchar') // 2010-5-14 修正一下 { if($size) { $size=strtoupper($type)=='varchar'?$size:8; $this->query("alter table `{$tbname}` add `$fieldname` {$type}( {$size} ) not null",true); } else $this->query("alter table `{$tbname}` add `$fieldname` mediatext not null",true); true を返します。 } function get_tables() //すべての表表名 { $tables=array(); $r=$this->fetch_all("テーブルを表示"); foreach($r を $v として) { foreach($v として $v_) { $tables[]=$v_; } } $tables を返します。 } function create_model_table($tbname) //作成一コンテンツ モデル表(開始:最初のみ有字段contentid int(20),コンテンツ テーブル用,//////////////////// /// update:2010-5-20 默认追加`content`mediumtext not null,字段) { if(in_array($tbname,$this->get_tables())) は false を返します。 /////////////////////現表名が存在する場合、false を返します if($this->query("テーブル `{$tbname}` を作成します ( `contentid` mediaint(8) が null ではありません、 `content` メディアテキストが null ではありません、 キー ( `contentid` ) ) エンジン = myisam デフォルト charset=utf8",true))return true; ///////////////////// 成功した場合は true を返します false を返す /////////////失敗した場合は false を返す } function create_table($tbname) //メンバー モデルの空のテーブルを作成します (最初はフィールド userid int(20) のみ、メンバー テーブルに使用、2010-4-26) { if(in_array($tbname,$this->get_tables())) false を返します if($this->query("テーブル `{$tbname}` を作成します ( `userid` mediaint(8) が null ではありません、 キー ( `userid` ) ) エンジン = myisam デフォルト charset=utf8",true))true を返します; false を返します。 } functionescape($str) // 危険な文字をフィルタリングします { if(!is_array($str)) return str_replace(array('n', 'r'), array(chr(10), chr(13)),mysql_real_escape_string(preg_replace($this->search,$this- >replace、$str)、$this->dblink)); foreach($str as $key=>$val) $str[$key] = $this->escape($val); $str を返します。 } function filter_pass($string, $allowedtags = '', $disabledattributes = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', ' onbeforeeditfocus'、'onbeforepaste'、'onbeforeprint'、'onbeforeunload'、'onbeforeupdate'、'onblur'、'onbounce'、'oncellchange'、'onchange'、'onclick'、'oncontextmenu'、'oncontrolselect'、'oncopy' 、 'oncut'、 'ondataavaible'、 'ondatasetchanged'、 'ondatasetcomplete'、 'ondblclick'、 'ondeactivate'、 'ondrag'、 'ondragdrop'、 'ondragend'、 'ondragenter'、 'ondragleave'、 'ondragover'、 ' ondragstart'、'ondrop'、'onerror'、'onerrorupdate'、'onfilterupdate'、'onfinish'、'onfocus'、'onfocusin'、'onfocusout'、'onhelp'、'onkeydown'、'onkeypress'、'onkeyup' 、'onlayoutcomplete'、'onload'、'onlosecapture'、'onmousedown'、'onmouseenter'、'onmouseleave'、'onmousemove'、'onmoveout'、'onmouseotutorialver'、'onmouseup'、'onmousewheel'、'onmove' 、' onmoveend'、'onmovestart'、'onpaste'、'onpropertychange'、'onreadystatechange'、'onreset'、'onresize'、'onresizeend'、'onresizestart'、'onrowexit'、'onrowsdelete'、'onrowsinserted'、'onscroll' 、'onselect'、'onselectionchange'、'onselectstart'、'onstart'、'onstop'、'onsubmit'、'onunload')) { if(is_array($string)) { foreach($string as $key => $val) $string[$key] = $this->filter_pass($val, allowed_htmltags); } それ以外は { $string = preg_replace('/s('.implode('|', $disabledattributes).').*?([s>])/', ' ', preg_replace('/<(.*?) > ;/ie', "'<'.preg_replace(array('/Web ページの効果:[^"']*/i', '/(".implode('|', $disabledattributes).")[ ] *=[ ]*["'][^"']*["']/i', '/s+/')、array('', '', ' ')、stripslashes(' ')) . ' >'"、strip_tags($string, $allowedtags))); } $string を返します。 } 関数drop_table($tbname) { Return $this->query("存在する場合はテーブルを削除 `{$tbname}`",true); } 関数バージョン() { mysql_get_server_info($this->dblink) を返します } } この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。 http://www.bkjia.com/PHPjc/923906.htmlwww.bkjia.comtrue http://www.bkjia.com/PHPjc/923906.html技術記事 mysql データベースを操作するためのシンプルで実践的な PHP クラス、シンプルで実践的な mysql この記事では、mysql データベースを操作するためのシンプルで実践的な PHP クラスについて説明します。参考のためにみんなで共有してください。詳細は以下の通りです...