ホームページ  >  記事  >  バックエンド開発  >  PHP の MySQL 接続クラスを深く理解する_PHP チュートリアル

PHP の MySQL 接続クラスを深く理解する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:07:53792ブラウズ

この MySQL 接続クラスをコンピューター上で偶然見つけました。どこに保存したか覚えていないので、ここに投稿します。
show_databases や show_tables などの次のいくつかのメソッドはすべて、大量のエコーを使用します。ただし、これはデータベースとテーブルの名前をリストするだけです。コンストラクターのパラメーターにデフォルト値を与えることもできます。

コードをコピーします コードは次のとおりです:

/*
* ファイル名: mysql データベース接続クラス
*/
class mysql{
private $db_host; //データベース ホスト
private $db_user //データベース ユーザー名
private $db_pwd;データベースのユーザー名とパスワード
private $db_database; // データベース名
private $conn; // 返されるエントリの数
private $coding
private $bulletin = true; //エラーログが有効かどうか
private $show_error = true //テストフェーズ、表示 セキュリティリスクのあるすべてのエラーはデフォルトでオフになります
private $is_error = false; //エラーが発生したときにすぐに終了するかどうか。問題が発生したときに何も表示されないのはユーザーにとって非常に苦痛であるため、デフォルトは true です。有効にしないことをお勧めします
/*Construction Function*/
public function __construct($db_host,$db_user,$ db_pwd,$db_database,$conn,$coding){
$this->db_host=$db_host;
$this->db_user=$db_user;
$this->db_pwd = $db_pwd;
$this-> ;db_database=$db_database;
$this->gt;conn=$conn;
$this->gt;coding=$coding;
$this->connect ();
}
/*データベース接続*/
public function connect()
{
if($this->conn=="pconn"){
//永続リンク
$this->conn=mysql_pconnect ($this->db_host,$this->db_user, $this->db_pwd);
}else{
// インスタント リンク
$this->gt;conn=mysql_connect($this->db_host,$this->db_user,$this->db_pwd);
}
if(!mysql_select_db($this->db_database,$this->conn)){
if($this->show_error){
$this->show_error("データベースが利用できません:",$ this->db_database);
}
}
mysql_query("SET NAMES $this->coding");
}
/*データベース実行ステートメント、実行可能クエリ、追加、変更、削除などの SQL ステートメント * /
public function query($sql)
{
if($sql == ""){
$this->show_error("sql ステートメント エラー: ","sql クエリ ステートメントが空です");}
$ this->sql = $sql;
$result = mysql_query($this->sql,$this->conn);
if(!$result){
/ / デバッグでエラーが発生したときに使用されます。 SQL ステートメントの場合、自動的に出力されます
if($this->show_error){
$this->show_error("Error sql state: ",$this->sql);
}
}else{
$this->result = $result;
}
return $this->result;
}
/*新しいデータベースを作成して追加*/
public function create_database($database_name){
$database= $database_name ;
$sqlDatabase = 'データベースの作成 '.$database;
$this->query($sqlDatabase);
}
/*サーバー上のすべてのデータベースをクエリ*/
//システム データベースをユーザー データベースから分離します。さらに直感的な表示?
public function show_databases(){
$rs=$this->query("show Databases");
echo "既存のデータベース: ".$amount =$this->db_num_rows($rs);
echo " < ;br />";
$i=1;
while($row = $this->fetch_array($rs)){
echo "$i $row[データベース]";
echo "
";
$i++;
}
}
//ホスト内のすべてのデータベース名を配列形式で返します
public functiondatabases()
{
$rsPtr=mysql_list_dbs($this->conn);
$i =0;
$cnt=mysql_num_rows($rsPtr);
while($i {
$rs[]=mysql_db_name($rsPtr,$i);
$i++;
}
return $rs;
}
/*データベース内のすべてのテーブルをクエリ*/
function show_tables($database_name){
$this->query("show tables");
echo "既存のデータベース:".$amount = $this- > ;db_num_rows($rs);
echo "
";
$i=1;
while($row = $this->fetch_array($rs)){
$columnName="Tables_in_" 。 $database_name;
echo "$i $row[$columnName]";
echo "
";
$i++;
}
}
/*
mysql_fetch_row() array $row[0], $ row[1],$row[2]
mysql_fetch_array() 配列 $row[0] または $row[id]
mysql_fetch_assoc() 配列 $row->コンテンツフィールドは大文字と小文字を区別します
mysql_fetch_object() オブジェクトは $ row を使用します[id],$row[content] フィールドは大文字と小文字が区別されます
*/
/*結果データを取得します*/
public function mysql_result_li()
{
return mysql_result($str);
}
/* レコードセットを取得します, 配列インデックスと関連付けを取得し、$row['content'] を使用します */
public function fetch_array()
{
return mysql_fetch_array($this->result);
}
//関連付け配列を取得し、使用します$row[ 'フィールド名']
public function fetch_assoc()
{
return mysql_fetch_assoc($this->result);
}
//数値インデックス配列を取得し、$row[0],$row[1] を使用します],$row [2]
public function fetch_row()
{
return mysql_fetch_row($this->result);
}
//オブジェクト配列を取得し、$row->content を使用します
public function fetch_Object()
{
return mysql_fetch_object ($this->result);
}
//クエリを単純化 select
public function findall($table)
{
$this->query("SELECT * FROM $table");
}
//クエリを単純化します select
public function select($table,$columnName,$condition)
{
if($columnName==""){
$columnName="*";
}
$this-> query("SELECT $ columnName FROM $table $condition");
}
//削除を単純化します del
public function delete($table,$condition){
$this->query("DELETE FROM $table WHERE $condition ");
}
//挿入を簡略化します
public function insert($table,$columnName,$value){
$this->query("INSERT INTO $table ($columnName) VALUES ($value)");
}
/ /変更の更新を簡素化する
public function update($table,$mod_content,$condition){
$this->query("UPDATE $table SET $mod_content WHERE $condition");
}
/*Get前回の INSERT 操作 生成された ID*/
public function insert_id(){
return mysql_insert_id();
}
//特定のデータ レコードを指す
public function db_data_seek($id){
if($id>0){
$id =$id-1;
}
if(!@mysql_data_seek($this->result,$id)){
$this->show_error("SQL ステートメントが正しくありません:", "指定されたデータが空です" ; ($this->show_error){
$this->show_error("SQL ステートメント エラー","一時的に空で、内容がありません。");
   }
   }else{
    return  mysql_num_rows($this->result);
   }
 }
 // 根据insert,update,delete执行结果取得影响行数
 public function db_affected_rows(){
   return mysql_affected_rows();
 }
 //输出显示sql语句
 public function show_error($message="",$sql=""){
  if(!$sql){
   echo "".$message."";
   echo "
";
  }else{
   echo "
";
   echo "错误信息提示:
";
   echo "
";
   echo "
";
   echo "错误号:12142";
   echo "

";
   echo "错误原因:".mysql_error()."

";
   echo "
";
   echo "".$message."";
   echo "
";
   echo "
".$sql."
";
    $ip=$this->getip();
    if($this->bulletin){
     $time = date("Y-m-d H:i:s");
     $message=$message."/r/n$this->sql"."/r/n客户IP:$ip"."/r/n时间 :$time"."/r/n/r/n";
     $server_date=date("Y-m-d");
     $filename=$server_date.".txt";
     $file_path="error/".$filename;
     $error_content=$message;
     //$error_content="错误的数据库,不可以链接";
     $file = "error"; //设置文件保存目录
     //建立文件夹
     if(!file_exists($file)){
      if(!mkdir($file,0777)){
      //默认的 mode 是 0777,意味着最大可能的访问权
       die("upload files directory does not exist and creation failed");
      }
     }
     //建立txt日期文件
     if(!file_exists($file_path)){
      //echo "建立日期文件";
      fopen($file_path,"w+");
      //首先要确定文件存在并且可写
      if (is_writable($file_path))
      {
       //使用添加模式打开$filename,文件指针将会在文件的开头
       if (!$handle = fopen($file_path, 'a'))
       {
        echo "不能打开文件 $filename";
        exit;
       }
        //将$somecontent写入到我们打开的文件中。
       if (!fwrite($handle, $error_content))
       {
        echo "不能写入到文件 $filename";
        exit;
       }
       //echo "文件 $filename 写入成功";
       echo "——错误记录被保存!";
       //关闭文件
       fclose($handle);
      } else {
       echo "文件 $filename 不可写";
      }
     }else{
      //首先要确定文件存在并且可写
      if (is_writable($file_path))
      {
       //使用添加模式打开$filename,文件指针将会在文件的开头
       if (!$handle = fopen($file_path, 'a'))
       {
        echo "不能打开文件 $filename";
        exit;
       }
        //将$somecontent写入到我们打开的文件中。
       if (!fwrite($handle, $error_content))
       {
        echo "不能写入到文件 $filename";
        exit;
       }
       //echo "文件 $filename 写入成功";
       echo "——错误记录被保存!";
       //关闭文件
       fclose($handle);
      } else {
       echo "文件 $filename 不可写";
      }
     }
    }
    echo "
";
    if($this->is_error){
     exit;
    }
   }
   echo "
";
echo "
";
echo "
";
}
//結果セットを解放する
public function free(){
@mysql_free_result($this->result ) ;
}
//データベースの選択
public function select_db($db_database){
return mysql_select_db($db_database);
}
//フィールド数をクエリ
public function num_fields($table_name){
//return mysql_num_fields ($this ->result);
$this->query("select * from $table_name");
echo "
";
echo "フィールド数: ".$total = mysql_num_fields ($this->result);
echo "
";<BR> for ($i=0; $i<$total; $i++){<BR> print_r(mysql_fetch_field($this->result,$i) ) );<br> }<br> echo "
";
echo "
";
}
//MySQL サーバー情報を取得します
public function mysql_server($num=''){
switch ( $num){
case 1:
return mysql_get_server_info(); //MySQL サーバー情報
Break;
case 2:
return mysql_get_host_info() // MySQL ホスト情報を取得
stop;
return mys ql_get_client_info(); MySQL クライアント情報を取得します
Break;
case 4:
return mysql_get_proto_info(); //MySQL プロトコル情報を取得します
Break;
default:
return mysql_get_client_info(); // デフォルトで mysql のバージョン情報を取得します
}
}
//分析コンストラクター、データベースを自動的に閉じる、ガベージ コレクション メカニズム
public function __destruct()
{
if(!empty($this->result)){
$this->free();
}
mysql_close($ this ->conn);
} //function __destruct();
/*クライアントの実際の IP アドレスを取得*/
function getip(){
if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP") ), "unknown"))
{
$ip = getenv("HTTP_CLIENT_IP");
}
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
$ ip = getenv("HTTP_X_FORWARDED_FOR");
}
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
{
$ip = getenv("REMOTE_ADDR");
}
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){
$ip = $_SERVER['REMOTE_ADDR' ];
}
else{
$ip = "unknown";
}
return($ip);
}
}
?>


http://www.bkjia.com/PHPjc/327505.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327505.html技術記事この Mysql 接続クラスをコンピューター上で偶然見つけました。どこに保存したか覚えていないので、ここに投稿します。 show_databases や show_tables などの次のメソッドはすべて大量の EC を使用します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。