sam_nucleus/sam_sql/config.php頁面
'; foreach($sam_db as $k => $v){ echo $k." : ".$v."
"; } echo '------------------------------------
'; */ ?>obj['sql_use_new_connection'] AND ! MYSQL_LEGACY ){ $this->obj['sql_connection'] = true ; $this->connection_id = mysql_pconnect( $this->obj['sql_host'] , //主機 $this->obj['sql_user'] , //帳號 $this->obj['sql_pass'] , //密碼 $this->obj['sql_connection'] //連結 ); $this->sql_code(); } //非開新連結(簡查版本) else { //舊版本 if ( MYSQL_LEGACY ) { $this->connection_id = mysql_connect( $this->obj['sql_host'] , //主機 $this->obj['sql_user'] , //帳號 $this->obj['sql_pass'] //密碼 ); $this->sql_code(); } //4.3之後版本 else { $this->obj['sql_connection'] = false ; $this->connection_id = mysql_connect( $this->obj['sql_host'] , //主機 $this->obj['sql_user'] , //帳號 $this->obj['sql_pass'] , //密碼 $this->obj['sql_connection'] //連結 ); $this->sql_code(); } } //因文字解析會造成所見即所得圖形,表格,等等無法正確運做,所以需更改 $this->use_escape_class = $this->obj['sql_use_escape']; //(0:關閉 1:有連線時(預設) 2僅字 //若沒接收到資料庫連線編號時 if ( ! $this->connection_id ) { $this->fatal_error(); //致命錯誤 return FALSE; //回傳 fales(錯誤) }else{ //正確連線資料庫後回傳 return TRUE; //回傳true(正確) } } // 資料庫使用編碼 function sql_code(){ //檢查編碼,若無將編碼設為預設編碼(utf-8) $code = (!$this->obj['sql_code']) ? 'utf-8' : strtolower($this->obj['sql_code']); //資料庫加入編碼 //CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL mysql_query("SET NAMES '" . $code . "'"); mysql_query("SET CHARACTER SET $code COLLATE utf8_general_ci"); mysql_query("SET CHARACTER_SET_RESULTS='" . $code . "'"); ////CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL } // 連結資料庫 function select_db(){ // 判斷是否與資料庫主機連線 if($this->connect()){ //echo $this->connection_id."
"; //連結資料庫 if(mysql_select_db($this->obj['sql_database'], $this->connection_id)){ return TRUE; }else{ // 判斷是否要新增資料庫[需注意權限問題] $this->build_new_db(); return FALSE; } }else{ return FALSE; } } // 新增資料錄(資料表名稱, 資料陣列(鍵:欄位,值:內容)) function insert_into_record($tab, $arr){ $this->select_db(); $this->handle_query($tab, $arr, 'insert'); //echo "insert_into_record內的query:
"; //echo "[".$query."]
"; $query = $this->no_check_query; //echo "[".$query."]
"; $this->no_check_query = ""; $bulid_record = mysql_query($query, $this->connection_id); if($bulid_record === FALSE){ //echo "[sam_sql]無法新增資料
"; $this->fatal_error(); //致命錯誤 return FALSE; //回傳 fales(錯誤) }else{ //echo "[sam_sql]已新增資料
"; return TRUE; } $this->close_db(); } // 讀取資料錄 //執行select運算 function sql_select($array){ if(array_true($array)){ //取出$array的鍵與 $array_k = array(); foreach($array as $k => $v){ $array_k[] = $k; } //$array導入 $this->select 陣列 if(in_array('select',$array_k)){$this->select['select'] = $array['select'];} if(in_array('from',$array_k)){$this->select['from'] = $array['from'];} if(in_array('join',$array_k)){$this->select['join'] = $array['join'];} if(in_array('on',$array_k)){$this->select['on'] = $array['on'];} if(in_array('where',$array_k)){$this->select['where'] = $array['where'];} if(in_array('AND',$array_k)){$this->select['AND'] = $array['AND'];} if(in_array('OR',$array_k)){$this->select['OR'] = $array['OR'];} if(in_array('LIKE',$array_k)){$this->select['LIKE'] = $array['LIKE'];} if(in_array('IN',$array_k)){$this->select['IN'] = $array['IN'];} if(in_array('BETWEEN',$array_k)){$this->select['BETWEEN'] = $array['BETWEEN'];} if(in_array('NOT_BETWEEN',$array_k)){$this->select['NOT_BETWEEN'] = $array['NOT_BETWEEN'];} if(in_array('NULL',$array_k)){$this->select['NULL'] = $array['NULL'];} if(in_array('order',$array_k)){$this->select['order'] = $array['order'];} //query執行順序 if(in_array('select',$array_k)){ $this->hendel_sql_select($array['select']); } if(in_array('from',$array_k)){ $this->hendel_sql_from($array['from']); } if(in_array('join',$array_k)){ $this->hendel_sql_join($array['join']); } if(in_array('where',$array_k)){ $this->hendel_sql_where($array['where']); } if(in_array('order',$array_k)){ $this->hendel_sql_order($array['order']); } //執行mysql_query取出資料表資訊 $result = mysql_query($this->check_query, $this->connection_id); if($result === FALSE){ echo '$result錯誤
'; echo 'SQL執行字串 : '.$this->check_query."
"; echo '連線ID: ' .$this->connection_id. "
"; echo mysql_errno() . " : " .mysql_error()."
"; }else{ } //取出資料筆數 $num_rows = mysql_num_rows($result); //取出欄位數量 $field_rows = mysql_num_fields($result); //暫存資料錄 $data = mysql_fetch_assoc($result); //資料表名欄位內容 $field_content =array(); //可指定單筆['資料表名']['欄名']['行數'] $field_contents =array(); //可用資料表方式全部秀出 //欄位名稱 $field_title_name =array(); //可指定單筆['資料表名']['欄名']['行數'] $field_title_names =array(); //可用資料表方式全部秀出 //先判斷有無 join 參數 (決定用何種方式陣列秀資料) if(in_array('join',$array_k)){ //無 join 資料['資料表名']['欄名'] = 欄值 //取出資料表名稱 $table_name = array(); $table_num = array(); $table_name[] = $array['from']; if(str_true($array['join'])){ //join 是字串 $table_name[] = $array['join']; } if(array_true($array['join'])){ //join 是陣列 $x=1; foreach($array['join'] as $k => $v){ $table_name[$x] = $k; $x++; } } //取出各資料表的欄位數量 $all_table_num = 0; //所有資料表總合欄位數量 $table_fields_name = array(); $all_table_fields = array(); $all_table_name = array(); //請參考 $array['select'] 的類型與值 if($array['select'] != "*"){ //依條件取出 /* if(){ //若為字串 }else{ //若為陣列 } */ }else{ //資料表名稱依總欄位數做陣列 $table_name_num = count($table_name); //資料表名稱陣列數量 for($i=0; $i<$table_name_num; $i++){ //每個資料表內欄位數量 $tb_fd_nuw = $this->get_field_num($table_name[$i]); for($j=0; $j<$tb_fd_nuw; $j++){ $all_table_name[] = $table_name[$i]; } } /***** 以下錯誤 *****//* //依序取出資料表欄位名稱$table_name[$x] foreach($table_name as $k => $v ){ $table_fields_name[] = $this->get_field_name($v); $all_table_name[] = } foreach($table_fields_name as $k => $v ){ foreach($v as $k1 => $v1 ){ $all_table_fields[]=$v1; } } */ } foreach($all_table_fields as $k => $v){ echo $k.".".$v."
"; } echo '
'; if( $num_rows>0 ){//若有資料 //若資料錄僅一筆時(陣列) if( $num_rows==1 ){ //將資料錄轉換成欄位陣列 mysql_data_seek($result,0); $fields = mysql_fetch_array($result); //資料表內容(一維陣列用) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); $field_title_names[] = $field_title; $field_contents[] = $fields[$y] ; //echo "  $fields[$y] 
"; } //資料表內容(多維陣列用) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); $field_title_name[$all_table_name[$y]][] = $field_title; $field_content[$all_table_name[$y]][$field_title] = $fields[$y] ; //echo "  $fields[$y] 
"; } //列出陣列測試是否為row['欄名'] = 內容 /* echo "單筆資料:
"; foreach($field_contents as $k => $v){ echo $k." = ".$v."
"; } */ }//若資料錄為多筆資料時(多維陣列['欄名']['第n筆']) else{ //資料表欄位名稱(多維陣列用) for($i=0; $i<$field_rows; $i++){ $field_title = mysql_field_name($result,$i); $field_title_name[$all_table_name[$i]][] = $field_title; } //資料表欄位名稱(一維陣列用) for($i=0; $i<$field_rows; $i++){ $field_title = mysql_field_name($result,$i); $field_title_names[] = $field_title; } for($x=0; $x<$num_rows; $x++){ //$data = mysql_fetch_assoc($result,$x); if($x <= $num_rows){//位移資料用 //變換作用資料錄位置 mysql_data_seek($result,$x); //將資料錄轉換成欄位陣列 $fields = mysql_fetch_array($result); //資料表內容(多維陣列用) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); //$field_title_name[] = $field_title; $field_content[$all_table_name[$y]][$field_title][] =$fields[$y] ; //echo "  $fields[$y] 
"; } //資料表內容(一維陣列用) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); //$field_title_name[] = $field_title; $field_contents[] =$fields[$y] ; //echo "  $fields[$y] 
"; } //echo "
"; } } } }else{ echo "查無資料"; return false; } }else{ //無 join 資料['欄名'] = 欄值 //列出全部資料(可完整列出) if( $num_rows>0 ){//若有資料 //若資料錄僅一筆時(陣列) if( $num_rows==1 ){ //將資料錄轉換成欄位陣列 mysql_data_seek($result,0); $fields = mysql_fetch_array($result); //資料表內容(一維陣列用) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); $field_title_names[] = $field_title; $field_contents[] = $fields[$y] ; //echo "  $fields[$y] 
"; } //資料表內容(多維陣列用) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); $field_title_name[$field_title] = $field_title; $field_content[$field_title] = $fields[$y] ; //echo "  $fields[$y] 
"; } //列出陣列測試是否為row['欄名'] = 內容 /* echo "單筆資料:
"; foreach($field_contents as $k => $v){ echo $k." = ".$v."
"; } */ }//若資料錄為多筆資料時(多維陣列['欄名']['第n筆']) else{ //資料表欄位名稱 for($i=0; $i<$field_rows; $i++){ $field_title = mysql_field_name($result,$i); $field_title_name[$field_title] = $field_title; $field_title_names[] = $field_title; } for($x=0; $x<$num_rows; $x++){ //$data = mysql_fetch_assoc($result,$x); if($x <= $num_rows){//位移資料用 //變換作用資料錄位置 mysql_data_seek($result,$x); //將資料錄轉換成欄位陣列 $fields = mysql_fetch_array($result); //資料表內容(多維陣列) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); //$field_title_name[] = $field_title; $field_content[$field_title][] =$fields[$y] ; //echo "  $fields[$y] 
"; } //資料表內容(一維陣列) for($y=0; $y<$field_rows; $y++){ //位移欄位用 $field_title = mysql_field_name($result,$y); //$field_title_name[] = $field_title; $field_contents[$x][$y] =$fields[$y] ; //echo "  $fields[$y] 
"; } //echo "
"; } } //測試多維陣列 $field_contents //註:基本上沒問題,但兩個資料表合併時?? // 攔位名稱可能會重覆==> // 需做合併後簡查重覆的欄位名稱$array['欄位名'][第幾筆] /* echo "測試多維陣列 $field_contents
"; echo $field_contents['description'][0]."
"; */ } }else{ //echo "查無資料"; return false; } } //將取得的資料表資訊導入起始陣列 /* //資料欄位資訊 var $sam_fields = array(); //合併所有資料表名稱在一維陣列 //資料欄位資訊 var $sam_field = array(); //能指定資料表名稱取出欄位 //資料錄數量(筆數) var $sam_num = 0; //資料錄(資料表所有內容) var $sam_record = array(); //多維陣列(名稱) //資料錄(資料表所有內容) var $sam_records = array(); //一維陣列(指標) */ $this->sam_field = ""; //清空資料欄位資訊 $this->sam_fields = ""; //清空資料欄位資訊 $this->sam_num = 0; //清空資料錄數量(筆數) $this->sam_record = ""; //清空資料錄(資料表所有內容) $this->sam_records = ""; //清空資料錄(資料表所有內容) $this->sam_field = $field_title_name; //寫入資料欄位資訊 $this->sam_fields = $field_title_names; //寫入資料欄位資訊 $this->sam_num = $num_rows; //寫入資料錄數量(筆數) $this->sam_record = $field_content; //寫入資料錄(資料表所有內容) $this->sam_records = $field_contents; //寫入資料錄(資料表所有內容) }else{ return FALSE; } } // 更新資料錄 function sql_update($tab, $arr, $condition){ $this->select_db(); $this->handle_query($tab, $arr, 'update', $condition); $query = $this->check_query; //echo $query."
"; $result = mysql_query($query, $this->connection_id); if($result === FALSE){ $this->fatal_error(); //致命錯誤 } $this->close_db(); } // 關閉連結資料庫 function close_db(){ mysql_close($this->connection_id); } /*------------------------------------ //============ 權限操作 ============== ------------------------------------*/ // 新增資料庫(未攥寫權限) function build_new_db(){ if($this->connect() and $this->obj['sql_database'] != ""){ $query = "CREATE DATABASE IF NOT EXISTS ".$this->obj['sql_database']; $build_db = mysql_query($query, $this->connection_id); if($build_db === FALSE){ $this->fatal_error(); //錯誤訊息 return FALSE; }else{ return TRUE; } $this->close_db(); }else{ $this->fatal_error(); //錯誤訊息 $this->close_db(); } } // 新增資料表 function build_new_table($new_table){ //檢查table_name是否為陣列且非空值 $this->select_db(); $this->build_db_table = $new_table; if(is_array($this->build_db_table) and count($this->build_db_table)){ //連結資料庫 $this->select_db(); //取出陣列值並編輯query字串($table_name[0]為資料表名稱,$table_name[]其它為欄位設定) $array_number = count($this->build_db_table); //取出元素個數 //建立新增資料表query字串(未檢驗) $query = "CREATE TABLE IF NOT EXISTS " . $this->obj['sql_tbl_prefix'] . $this->build_db_table[0] . "("; for($x=1; $x<$array_number; $x++){ $query = $query.$this->build_db_table[$x] ; } $query .= ") TYPE=" . $this->obj['sql_tbl_type'] . ";"; //echo '$query : '.$query."
"; //跳脫query字串 /* if($this->use_check != 0){ $this->no_check_qurey = $query; $this->check_qurey = $this->escape_query($this->no_check_qurey); $query = $this->check_qurey; } */ //mysql_qurry操作 $build_tables = mysql_query($query , $this->connection_id); if($build_tables === FALSE){ $this->fatal_error(); //錯誤訊息 return FALSE; }else{ return TRUE; } //將query設為空值 $query = ""; $this->no_check_qurey = ""; $this->check_qurey = ""; } $this->close_db(); } // 刪除資料錄($tab:資料表名 $condition陣列[where鍵 = 值]) function sql_delete($tab, $condition=FALSE){ //連結資料庫 $this->select_db(); //若有$condition 才動作(判斷要刪哪一筆,避免全刪) if(array_true($condition)){ //檢查是否有資料表 if($this->search_table_name($tab)){ //query字串(記的加上資料表前置字元) $query = "DELETE FROM " . $this->obj['sql_tbl_prefix'] . $tab; //取出陣列鍵:值 foreach($condition as $k => $v){ $query .= " WHERE $k = {$v}"; } //執行mysql_query $result = mysql_query($query, $this->connection_id); return TRUE; } }else{ return FALSE; } $this->close_db(); } /*------------------------------------ //============ 危險動作 ============== ------------------------------------*/ // 刪除資料表 // 刪除資料庫 /*** [動作控制設定] *********************************************************************/ //取得資料庫列表 function get_db_list(){ $dbs = mysql_list_dbs($this->connection_id); $dbname = array(); if(!is_resource($dbs)){ }else{ for($i=0; $iconnection_id); if(! is_resource($tables)){ return FALSE; }else{ $num = mysql_num_rows($tables); if($num == 0){ return FALSE; }else{ for($j=0; $j<$num;$j++){ $tablename = mysql_table_name($tables, $j); $this->all_tables[] = $tablename; } return $this->all_tables; } } } //取出資料表欄位數量 function get_field_num($table){ $this->select_db(); $query = "SELECT * FROM " . $this->obj['sql_tbl_prefix'] .$table ; $rs = mysql_query($query, $this->connection_id); $num = mysql_num_fields($rs); return $num; } //取得資料表欄位名稱 function get_field_name($table){ $this->select_db(); $query = "SELECT * FROM " . $this->obj['sql_tbl_prefix'] .$table ; $rs = mysql_query($query, $this->connection_id); $num = mysql_num_fields($rs); $field_name = array(); for($x=0; $x<$num; $x++){ $field_name[] = mysql_field_name($rs,$x); } return $field_name; } //檢查資料表是否存在 array_contrast_str function search_table_name($tab){ //取得資料庫內所有資料表名稱 $table_name_array = array(); $table_name_array = $this->get_table_list($this->obj['sql_database']); $tab = $this->obj['sql_tbl_prefix'] . $tab; if(array_contrast_str($table_name_array, $tab, $dim=FALSE)){ return TRUE; }else{ return FALSE; } } /*** [資料格式判斷] *********************************************************************/ /*** [錯誤處理] *********************************************************************/ function fatal_error(){ $this->error = mysql_error(); $this->error_no = mysql_errno(); echo $this->error_no.":".$this->error."
"; if($this->obj['sql_stop'] == 1){ exit (); } } /*** [其它] *********************************************************************/ // 自動執行 function samSQL(){ // 將sql_driver 轉換成小寫 mysql $this->obj['sql_driver'] = (!$this->obj['sql_driver']) ? 'mysql' : strtolower($this->obj['sql_driver']); //若非使用 mysql 為資料庫語法時,退出執行 if($this->obj['sql_driver'] != 'mysql'){ exit ("選用的資料庫語言錯誤!!"); } } //mysql跳脫字串(將魔術字元加/) function escape_query($query){ if($this->use_escape_class == 0){ return $query; }elseif($this->use_escape_class == 2){ $escape_str = mysql_escape_string($query); return $escape_str; }else{ $escape_str = mysql_real_escape_string($query,$this->connection_id); return $escape_str; } } } } ?>obj['sql_driver'] = $this->vars['sql_driver']; //資料庫類型 $this->obj['sql_host'] = $this->vars['sql_host']; //主機位址 $this->obj['sql_user'] = $this->vars['sql_user']; //帳號 $this->obj['sql_pass'] = $this->vars['sql_pass']; //密碼 $this->obj['sql_code'] = $this->vars['sql_code']; //資料庫編碼 $this->obj['sql_database'] = $this->vars['sql_database']; //資料庫名稱 $this->obj['sql_tbl_prefix'] = $this->vars['sql_tbl_prefix']; //資料表前置字元 //sam_nucleus/sam_sqlconfig.php可更改值 $this->obj['sql_tbl_type'] = $this->vars['sql_tbl_type']; //資料表樣式 $this->obj['safe_mode'] = $this->vars['safe_mode']; //啟用安全模組 $this->obj['sql_debug'] = $this->vars['sql_debug']; //啟用除錯 $this->obj['sql_limit'] = $this->vars['sql_limit']; //資料庫權限 $this->obj['sql_stop'] = $this->vars['sql_stop']; //啟用錯誤時停止程式 //sam_nucleus/sam_sql/ArSam_Db_Set.php內的其它值 } // 連結資料庫主機 function db_connect(){ $this->DB(); if($this->connect()){ return true; }else{ return false; } } // 連結資料庫 function db_select_db(){ $this->DB(); $this->select_db(); } // 新增資料錄(資料表名,資料陣列[鍵:欄名,值:欄位內容]) function db_insert_into($tab,$arr){ $this->db_select_db(); $this->insert_into_record($tab,$arr); } // 讀取資料錄 function db_select($array){ $this->db_select_db(); $this->sql_select($array); } // 更新資料錄 function db_update($tab, $arr, $condition){ $this->db_select_db(); $this->sql_update($tab, $arr, $condition); } // 關閉連結資料庫 /*------------------------------------ //============ 權限操作 ============== ------------------------------------*/ // 新增資料庫 function build_db(){ $this->DB(); $this->build_new_db(); } // 新增資料表 function build_table($new_table){ $this->DB(); $this->build_new_table($new_table); } // 刪除資料錄 function db_delete($tab, $condition=FALSE){ $this->DB(); $this->sql_delete($tab, $condition); } /*------------------------------------ //============ 危險動作 ============== ------------------------------------*/ // 刪除資料表 // 刪除資料庫 /*** [動作控制設定] *********************************************************************/ /*** [資料格式判斷] *********************************************************************/ /*** [錯誤處理] *********************************************************************/ /*** [其它] *********************************************************************/ // 自動執行 function sam_DB_Class(){ } } } ?> Fatal error: Class 'sam_DB_Class' not found in /var/www/vhosts/rontai.com.tw/httpdocs/contact/sam_nucleus/config.php on line 18