完整的PHP MYSQL資料庫類

來源:互聯網
上載者:User
<?phpclass mysql {private $db_host; //資料庫主機private $db_user; //資料庫使用者名稱private $db_pwd; //資料庫使用者名稱密碼private $db_database; //資料庫名private $conn; //資料庫連接標識;private $result; //執行query命令的結果資源標識private $sql; //sql執行語句private $row; //返回的條目數private $coding; //資料庫編碼,GBK,UTF8,gb2312private $bulletin = true; //是否開啟錯誤記錄private $show_error = false; //測試階段,顯示所有錯誤,具有安全隱患,預設關閉private $is_error = false; //發現錯誤是否立即終止,預設true,建議不啟用,因為當有問題時使用者什麼也看不到是很苦惱的/*建構函式*/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->conn = $conn;$this->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->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("錯誤SQL語句:", $this->sql);}} else {$this->result = $result;}return $this->result;}/*建立添加新的資料庫*/public function create_database($database_name) {$database = $database_name;$sqlDatabase = 'create database ' . $database;$this->query($sqlDatabase);}/*查詢服務器所有資料庫*///將系統資料庫與使用者資料庫分開,更直觀的顯示?public function show_databases() {$this->query("show databases");echo "現有資料庫:" . $amount = $this->db_num_rows($rs);echo "<br />";$i = 1;while ($row = $this->fetch_array($rs)) {echo "$i $row[Database]";echo "<br />";$i++;}}//以數組形式返回主機中所有資料庫名public function databases() {$rsPtr = mysql_list_dbs($this->conn);$i = 0;$cnt = mysql_num_rows($rsPtr);while ($i < $cnt) {$rs[] = mysql_db_name($rsPtr, $i);$i++;}return $rs;}/*查詢資料庫下所有的表*/public function show_tables($database_name) {$this->query("show tables");echo "現有資料庫:" . $amount = $this->db_num_rows($rs);echo "<br />";$i = 1;while ($row = $this->fetch_array($rs)) {$columnName = "Tables_in_" . $database_name;echo "$i $row[$columnName]";echo "<br />";$i++;}}/*mysql_fetch_row()    array  $row[0],$row[1],$row[2]mysql_fetch_array()  array  $row[0] 或 $row[id]mysql_fetch_assoc()  array  用$row->content 欄位大小寫敏感mysql_fetch_object() object 用$row[id],$row[content] 欄位大小寫敏感*//*取得結果資料*/public function mysql_result_li() {return mysql_result($str);}/*取得記錄集,擷取數組-索引和關聯,使用$row['content'] */public function fetch_array($resultt="") {if($resultt<>""){return mysql_fetch_array($resultt);}else{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->contentpublic function fetch_Object() {return mysql_fetch_object($this->result);}//簡化查詢selectpublic function findall($table) {$this->query("SELECT * FROM $table");}//簡化查詢selectpublic function select($table, $columnName = "*", $condition = '', $debug = '') {$condition = $condition ? ' Where ' . $condition : NULL;if ($debug) {echo "SELECT $columnName FROM $table $condition";} else {$this->query("SELECT $columnName FROM $table $condition");}}//簡化刪除delpublic function delete($table, $condition, $url = '') {if ($this->query("DELETE FROM $table WHERE $condition")) {if (!empty ($url))$this->Get_admin_msg($url, '刪除成功!');}}//簡化插入insertpublic function insert($table, $columnName, $value, $url = '') {if ($this->query("INSERT INTO $table ($columnName) VALUES ($value)")) {if (!empty ($url))$this->Get_admin_msg($url, '添加成功!');}}//簡化修改updatepublic function update($table, $mod_content, $condition, $url = '') {//echo "UPDATE $table SET $mod_content WHERE $condition"; exit();if ($this->query("UPDATE $table SET $mod_content WHERE $condition")) {if (!empty ($url))$this->Get_admin_msg($url);}}/*取得上一步 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語句有誤:", "指定的資料為空白");}return $this->result;}// 根據select查詢結果計算結果集條數public function db_num_rows() {if ($this->result == null) {if ($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 "<font color='red'>" . $message . "</font>";echo "<br />";} else {echo "<fieldset>";echo "<legend>錯誤資訊提示:</legend><br />";echo "<div style='font-size:14px; clear:both; font-family:Verdana, Arial, Helvetica, sans-serif;'>";echo "<div style='height:20px; background:#000000; border:1px #000000 solid'>";echo "<font color='white'>錯誤號碼:12142</font>";echo "</div><br />";echo "錯誤原因:" . mysql_error() . "<br /><br />";echo "<div style='height:20px; background:#FF0000; border:1px #FF0000 solid'>";echo "<font color='white'>" . $message . "</font>";echo "</div>";echo "<font color='red'><pre>" . $sql . "</pre></font>";$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 "<br />";if ($this->is_error) {exit;}}echo "</div>";echo "</fieldset>";echo "<br />";}//釋放結果集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 "<br />";echo "欄位數:" . $total = mysql_num_fields($this->result);echo "<pre>";for ($i = 0; $i < $total; $i++) {print_r(mysql_fetch_field($this->result, $i));}echo "</pre>";echo "<br />";}//取得 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 主機資訊break;case 3 :return mysql_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");} elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {$ip = getenv("HTTP_X_FORWARDED_FOR");} elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {$ip = getenv("REMOTE_ADDR");} elseif (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {$ip = $_SERVER['REMOTE_ADDR'];} else {$ip = "unknown";}return ($ip);}function inject_check($sql_str) { //防止注入$check = eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);if ($check) {echo "輸入非法注入內容!";exit ();} else {return $sql_str;}}function checkurl() { //檢查來路if (preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) !== preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])) {header("Location: http://www.dareng.com");exit();}}}?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.