ホームページ  >  記事  >  バックエンド開発  >  実践的な php mysql データベース接続 class_PHP チュートリアル

実践的な php mysql データベース接続 class_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:09:31948ブラウズ

phpチュートリアルmysqlチュートリアルデータベースチュートリアル接続クラス
このデータベース接続クラスは、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', '<meta><body><a><p><br><hr><h1><h2> ;<h3><h4><h5><h6><font>gt;<u><i><b><strong><div><span><ol>< ;ul><li><img alt="実践的な php mysql データベース接続 class_PHP チュートリアル" ><テーブル><tr><td><マップ>'); $this->pconnect=$pconnect;<br /> $this->dblink=$pconnect?mysql_pconnect($hostname,$username,$userpwd):mysql_connect($hostname,$username,$userpwd);<br /> (!$this->dblink||!is_resource($this->dblink)) && Fatal_error("データベースへの接続に失敗しました!");<br> @mysql_unbuffered_query("セット名 {$charset}");<br> if($this->version()>'5.0.1')<br> {<br> @mysql_unbuffered_query("set sql_mode = ''");<br> }<br> @mysql_select_db($database) または Fatal_error("テーブルを選択できません!");<br> $this->dblink;<br> を返す }<br> </p>関数クエリ($sql,$unbuffered=false)<p> {<br> // $sql をエコーし​​ます。'<br>';<br> $this->rs=$unbuffered?mysql_unbuffered_query($sql,$this->dblink):mysql_query($sql,$this->dblink);<br> //(!$this->rs||!is_resource($this->rs)) && Fatal_error("クエリの実行に失敗しました! error:".mysql_error());<br> if(!$this->rs)fatal_error('SQL ステートメント '.$sql.' の実行時に次のエラーが発生しました:'.mysql_error());<br> $this->rs; を返す<br> }<br> </p>関数 fetch_one($sql)<p> {<br> $this->rs=$this->クエリ($sql);<br> dircms_strips チュートリアルを返す lashes($this->filter_pass(mysql_fetch_array($this->rs,mysql_assoc)));<br> }<br> </p> function get_maxfield($filed='id',$table) // $table テーブルの $filed フィールドの最大値を取得します<p> {<br> $r=$this->fetch_one("select {$table}.{$filed} from `{$table}` order by `{$table}`.`{$filed}` desc limit 0,1") ;<br> $r[$filed] を返します;<br> }<br> </p>関数 fetch_all($sql)<p> {<br> $this->rs=$this->クエリ($sql);<br> $result=array();<br> while($rows=mysql_fetch_array($this->rs,mysql_assoc))<br> {<br> $result[]=$rows;<br> }<br> <br> mysql_free_result($this->rs);<br> dircms_stripslashes($this->filter_pass($result)) を返します <br> }<br> </p>関数 fetch_all_withkey($sql,$key='id')<p> {<br> $this->rs=$this->クエリ($sql);<br> $result=array();<br> while($rows=mysql_fetch_array($this->rs,mysql_assoc))<br> {<br> $result[$rows[$key]]=$rows;<br> }<br> <br> mysql_free_result($this->rs);<br> dircms_stripslashes($this->filter_pass($result)) を返します <br> }<br> </p>関数 last_insert_id()<p> {<br> if(($insertid=mysql_insert_id($this->dblink))>0)return $insertid;<br> else //auto_increment のカラム型が bigint の場合、mysql_insert_id() によって返される値は正しくありません。<br> {<br> $result=$this->fetch_one('last_insert_id() を insertid として選択');<br> $result['insertid'];<br>を返します }<br> }<br></p> <p> 関数挿入($tbname,$varray,$replace=false)<br>  {<br>   $varray=$this->escape($varray);<br>   $tb_fields=$this->get_fields($tbname); // mb.bKjia.c0m 升级一下,增加判断字段有無<br>   <br>   foreach($varray as $key => $value)<br>   {<br>    if(in_array($key,$tb_fields))<br>    {<br>     $filds[]='`'.$key.'`';<br>     $values[]=is_string($value)?'''.$value.''':$value;<br>    }<br>   }</p> <p> if($fileds)<br>   {<br>    $filds=implode(',',$fileds);<br>    $filds=str_replace(''','`',$fileds);<br>    $values=implode(',',$values);<br>    $sql=$replace?"{$tbname}({$fileds}) の値 ({$values}) に置き換えます":"{$tbname}({$fileds}) の値 ({$values}) に挿入します"; <br>    $this->query($sql,true);<br>    return $this->last_insert_id();<br>   }<br>   それ以外の場合は false を返します;<br>  }</p> <p> 関数更新($tbname, $array, $where = '')<br>  {<br>   $array=$this->escape($array);<br>   if($where)<br>   {<br>    $tb_fields=$this->get_fields($tbname); // www.bKjia.c0m,增加判断字段有無<br>    <br>    $sql = '';<br>    foreach($array as $k=>$v)<br>    {<br>     if(in_array($k,$tb_fields))<br>     {<br>      $k=str_replace('','',$k);<br>      $sql .= ", `$k`='$v'";<br>     }<br>    }<br>    $sql = substr($sql, 1);<br>    <br>    if($sql)$sql = "更新 `$tbname` set $sql where $where";<br>    それ以外の場合は true を返します;<br>   }<br>   それ以外<br>   {<br>    $sql = "`$tbname`(`".implode('`,`', array_keys($array))."`) 値('".implode("','", $array) に置き換えます。" ')";<br>   }<br>   return $this->query($sql,true);<br>  }<br>  <br>  function mysql_delete($tbname,$idarray,$filedname='id')<br>  {<br>   $idwhere=is_array($idarray)?implode(',',$idarray):intval($idarray);<br>   $where=is_array($idarray)?"{$tbname}.{$filedname} in ({$idwhere})":" {$tbname}.{$filedname}={$idwhere}";</p> <p> return $this->query("delete from {$tbname} where {$where}",true);<br>  }</p> <p> 関数 get_fields($table)<br>  {<br>   $fields=array();<br>   $result=$this->fetch_all("`{$table}` の列を表示");<br>   foreach($result as $val)<br>   {<br>    $fields[]=$val['フィールド'];<br>   }<br>   $fields を返します;<br>  }</p> <p> 関数 get_table_status($database)<br>  {<br>   $status=array();<br>   $r=$this->fetch_all("`".$database."`" からテーブルのステータスを表示); /////// show table ステータスの特性は show table と同様ですが、各テーブルの大量の情報を提供できます。   foreach($r as $v)<br>   {<br>    $status[]=$v;<br>   }<br>   $status を返します;<br>  }<br> </p> 関数 get_one_table_status($table)<p>  {<br>   return $this->fetch_one("'$table' のようなテーブルのステータスを表示");<br>  }<br> </p> function create_fields($tbname,$fieldname,$size=0,$type='varchar') // 2010-5-14 修正一下<p>  { <br>   if($size)<br>   {<br>    $size=strtoupper($type)=='varchar'?$size:8;<br>    $this->query("alter table `{$tbname}` add `$fieldname` {$type}( {$size} ) not null",true);<br>   }<br>   else $this->query("alter table `{$tbname}` add `$fieldname` mediatext not null",true);<br>   true を返します;<br>  }<br> </p> function get_tables() //すべての表表名を取得します<p>  {<br>   $tables=array();<br>   $r=$this->fetch_all("テーブルを表示");<br>   foreach($r as $v)<br>   {<br>    foreach($v として $v_)<br>    {<br>     $tables[]=$v_;<br>    }<br>   }<br>   $tables を返します;<br>  }<br></p> <p> function create_model_table($tbname) //コンテンツ モデル テーブルを作成します (開始: 最初はフィールド contentid int(20) のみ、コンテンツ テーブルに使用されます。 ////////////////// / //// 更新: 2010-5-20 `content` メディアテキストが null ではありません、フィールドはデフォルトで追加されました)<br> {<br> if(in_array($tbname,$this->get_tables())) return false; ///////////////////// テーブル名がすでに存在する場合、 falseを返します <br> if($this->query("テーブル `{$tbname}` を作成します (<br>) `contentid` mediaint(8) が null ではありません、<br> `content` メディアテキストが null ではありません、<br> キー(`コンテンツID`) <br> ) エンジン = myisam デフォルト charset=utf8",true))return true; ///////////////////// 成功時に true を返します<br> false を返す /////////////失敗した場合は false を返します<br> }</p> <p> function create_table($tbname) //メンバー モデルの空のテーブルを作成します (最初はフィールド userid int(20) のみ、メンバー テーブルに使用、2010-4-26)<br> {<br> if(in_array($tbname,$this->get_tables())) return false;<br> if($this->query("テーブル `{$tbname}` を作成します (<br>) `userid` mediaint(8) が null ではありません、<br> キー ( `userid` ) <br> ) エンジン = myisam デフォルト charset=utf8",true))true を返します;<br> false を返します;<br> }</p> <p> functionscape($str) // 危険な文字をフィルタリングします<br> {<br> 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));<br> foreach($str as $key=>$val) $str[$key] = $this->escape($val);<br> $str;<br>を返します }</p> <p> 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'))<br> {<br> if(is_array($string))<br> {<br> foreach($string as $key => $val) $string[$key] = $this->filter_pass($val, allowed_htmltags);<br> }<br> それ以外<br> {<br> $string = preg_replace('/s('.implode('|', $disabledattributes).').*?([s>])/', '2', preg_replace('/<(.*?) >/ie', "'<'.preg_replace(array('/Web ページの効果:[^"']*/i', '/(".implode('|', $disabledattributes).")[ tn ]*=[ tn]*["'][^"']*["']/i', '/s+/')、array('', '', ' ')、stripslashes('1' ) ) '>'"、strip_tags($string, $allowedtags)));<br> }<br> $string を返します;<br> }</p> <p>関数drop_table($tbname)<br> {<br> Return $this->query("存在する場合はテーブルを削除 `{$tbname}`",true);<br> }</p> <p>関数バージョン()<br> {<br> mysql_get_server_info($this->dblink)を返します;<br> }<br> }</p> <p align="left"></p> <div style="display:none;"> <span id="url" itemprop="url">http://www.bkjia.com/PHPjc/629738.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">tru​​e</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/629738.html</span><span id="genre" itemprop="genre">技術記事</span><span id="description" itemprop="description"> php チュートリアル mysql チュートリアル データベース チュートリアル 接続クラス このデータベース接続クラスは、SQL アンチインジェクション関数を自動的にロードし、いくつかの機密性の高い SQL クエリ キーワードをフィルタリングし、判断ワードも追加します...</span> </div> <div class="art_confoot"></div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="クラシック PHP アンチインジェクション関数 code_PHP チュートリアル" href="http://m.php.cn/ja/faq/299753.html">クラシック PHP アンチインジェクション関数 code_PHP チュートリアル</a></span><span>次の記事:<a class="dBlack" title="クラシック PHP アンチインジェクション関数 code_PHP チュートリアル" href="http://m.php.cn/ja/faq/299755.html">クラシック PHP アンチインジェクション関数 code_PHP チュートリアル</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="http://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/2.html" title="正規表現内のすべての式記号 (概要)" class="aBlack">正規表現内のすべての式記号 (概要)</a><div class="clear"></div></li></ul></div></div><div class="nphpFoot"><div class="nphpFootBg"><ul class="nphpFootMenu"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><p>ホームページ</p></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><p>コース</p></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><p>に質問</p></a></li><li><a href="http://m.php.cn/ja/login"><b class="icon5"></b><p>私の</p></a></li><div class="clear"></div></ul></div></div><div class="nphpYouBox" style="display: none;"><div class="nphpYouBg"><div class="nphpYouTitle"><span onclick="$('.nphpYouBox').hide()"></span><a href="http://m.php.cn/ja/"></a><div class="clear"></div></div><ul class="nphpYouList"><li><a href="http://m.php.cn/ja/"><b class="icon1"></b><span>ホームページ</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course.html"><b class="icon2"></b><span>コース</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/article.html"><b class="icon3"></b><span>記事</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/wenda.html"><b class="icon4"></b><span>に質問</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/dic.html"><b class="icon6"></b><span>辞書</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/course/type/99.html"><b class="icon7"></b><span>マニュアル</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/xiazai/"><b class="icon8"></b><span>ダウンロード</span><div class="clear"></div></a></li><li><a href="http://m.php.cn/ja/faq/zt" title="特集"><b class="icon12"></b><span>特集</span><div class="clear"></div></a></li><div class="clear"></div></ul></div></div><div class="nphpDing" style="display: none;"><div class="nphpDinglogo"><a href="http://m.php.cn/ja/"></a></div><div class="nphpNavIn1"><div class="swiper-container nphpNavSwiper1"><div class="swiper-wrapper"><div class="swiper-slide"><a href="http://m.php.cn/ja/" >ホームページ</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/article.html" class="hover">記事</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/wenda.html" >に質問</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/course.html" >コース</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/faq/zt" >特集</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/xiazai" >ダウンロード</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/game" >ゲーム</a></div><div class="swiper-slide"><a href="http://m.php.cn/ja/dic.html" >辞書</a></div><div class="clear"></div></div></div><div class="langadivs" ><a href="javascript:;" class="bg4 bglanguage"></a><div class="langadiv" ><a onclick="javascript:setlang('zh-cn');" class="language course-right-orders chooselan " href="javascript:;"><span>简体中文</span><span>(ZH-CN)</span></a><a onclick="javascript:setlang('en');" class="language course-right-orders chooselan " href="javascript:;"><span>English</span><span>(EN)</span></a><a onclick="javascript:setlang('zh-tw');" class="language course-right-orders chooselan " href="javascript:;"><span>繁体中文</span><span>(ZH-TW)</span></a><a onclick="javascript:;" class="language course-right-orders chooselan chooselanguage" href="javascript:;"><span>日本語</span><span>(JA)</span></a><a onclick="javascript:setlang('ko');" class="language course-right-orders chooselan " href="javascript:;"><span>한국어</span><span>(KO)</span></a><a onclick="javascript:setlang('ms');" class="language course-right-orders chooselan " href="javascript:;"><span>Melayu</span><span>(MS)</span></a><a onclick="javascript:setlang('fr');" class="language course-right-orders chooselan " href="javascript:;"><span>Français</span><span>(FR)</span></a><a onclick="javascript:setlang('de');" class="language course-right-orders chooselan " href="javascript:;"><span>Deutsch</span><span>(DE)</span></a></div></div><script> var swiper = new Swiper('.nphpNavSwiper1', { slidesPerView : 'auto', observer: true,//修改swiper自己或子元素时,自动初始化swiper observeParents: true,//修改swiper的父元素时,自动初始化swiper }); </script></div></div><!--顶部导航 end--><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>