/*mysql の単純なクラス by joffe q89949401 bib@Crazycode 詩人;
このクラスは完全に静的です。使用する場合は、直接インクルードして mysql::method() 名を使用します。クラスは php5 でグローバルに表示されるため、コメントがある場合は変数のスコープを気にする必要はありません。プライベート メッセージ ||qq メールを送信してください。
現在、ストアド プロシージャに関連するメソッドはありません。もちろん、ストアド プロシージャは通常、データベースを作成するときに実行されます。
構成ファイルでは、次の定数情報を構成する必要があります。
LIB: クラスの保存場所
DEBUG:デバッグを有効にするかどうか(有効にするとエラー情報追跡が出力されます)
TB_EX: データベーステーブルのプレフィックス。
select del update insert big_select big_del 関数を追加しました
*/
- /*mysql simple class by joffe q89949401 bib@Crazycode quote;
- このクラスが完全に静的に使用される場合は、クラスがグローバルであるため、直接インクルードし、mysql::method() 名を使用します。 php5 可視なので、変数のスコープを気にする必要はありません。コメントがある場合は、プライベート メッセージを送信してください ||qq メール;
- ストアド プロシージャに関連するメソッドは現在ありません。
- データベース作成時に設定が必要な設定ファイル 以下の定数情報:
- LIB: クラスの格納場所
- DEBUG: デバッグを有効にするかどうか (有効にするとエラーメッセージの追跡が出力されます)
- TB_EX: データベーステーブルのプレフィックス;
- */
- define('LIB') または die('Missing config!! ');
- final class mysql {
- /**
- * クエリの合計数
- *
- * @var int
- */
- public static $querynum = 0; &*/
- public static $link;
- /*
- table prefix
- @var string 次のメソッドでは、テーブルのプレフィックスとして TB_EX を構成する必要があります
- */
- static function add_ex($tb){
- return TB_EX.$tb_ex.$tb;
- }
- /*mysql データベースが厳密な型を使用するかどうか (mysql 型は自動的に変換されません) デフォルトは false で、mysql の型変換がオンになっていることを意味します。自動変換を行わない mysql の挿入関数の一重引用符。関連する関数は将来追加される可能性があります
-
- */
- public static $is_type_tight=false;
- /**
- * 接続ハンドル
- *
- * @var オブジェクト
- */
- static function connent($dbhost) , $dbuser, $dbpw, $dbname = "",$dbcharset, $pconnect = 0) {
- if($ pconnect) {
- if(!self::$link = @mysql_pconnect($dbhost, $dbuser, $dbpw )) {
- self::halt("MySQL サーバーに接続できません");
- }
- } else {
- if(!self::$link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
- self::halt("MySQL サーバーに接続できません");
- }
- }
- if(self::version () > "4.1") {
- if($dbcharset) {
- mysql_query("SETcharacter_set_connection={ $dbcharset},character_set_results=$dbcharset,character_set_client=binary", self::$link);
- }
- if( self::version() > "5.0.1") {
- mysql_query("SET sql_mode='') ", self::$link);
- }
- }
- if($dbname) {
- mysql_select_db($dbname, self::$link);
- }
- }
- /**
- * コンストラクター
- *
- * @param string $dbhost ホスト名
- * @param string $dbuser user
- * @param string $dbpw パスワード
- * @param string $dbname データベース名
- * @param int $pconnectつながり
- */
- 静的関数 select_db ($dbname) {
- return mysql_select_db($dbname, self::$link);
- }
- /**
- * データベースを選択
- *
- * @param string $dbname
- * @return
- */
- static function fetch_array($query, $result_type = MYSQL_ASSOC) { //デフォルトでは、数値配列ではなく、連想配列がフェッチされます。 = $type == "UNBUFFERED" && @function_exists("mysql_unbuffered_query")
- "mysql_unbuffered_query" : "mysql_query"
- if( !($query = $func($sql, self::$link)) && $type != "SILENT") {
- self::halt("MySQL クエリ エラー", $sql);
- self:: $querynum++
- }
- /**
- * 結果セットからレコードを取得します
- *
- * @param object $query
- * @param int $result_type
- * @return array
- */
- static関数影響を受ける_rows() {
- return mysql_affected_rows(self::$link);
- }
- /**
- * 查询SQL
- *
- * @param string $sql
- * @param string $type
- * @return object
- */
- static 関数 error() {
- return ((self::$link) ? mysql_error(self:: $link) : mysql_error());
- }
- /**
- * 影響を受けるアイテムの数を取得します
- *
- * @return int
- */
- static 関数 errno() {
- return intval((self::$link) ? mysql_errno(self::$link) : mysql_errno( ));
- }
- /**
- * エラーメッセージを返す
- *
- * @return array
- */
- 静的関数 result($query, $row,$flname=0 ) {
- $query = @mysql_result($query, $row,$flname); $query;
- }
- /**
- * エラーコードを返す
- *
- * @return int
- */
- 静的関数 num_rows($query) {
- $query = mysql_num_rows( $query);
- /**
- * クエリ結果を返す
- *
- * @param object $query
- * @param string $row
- * @returnmixed
- */
- 静的関数 num_fields($query) {
- return mysql_num_fields($query);
- /**
- * 結果の数
- *
- * @param object $query
- * @return int
- */
- static 関数 free_result($query) {
- return @mysql_free_result($query);
- /**
- * 自動インクリメント ID を返す
- *
- * @return int
- */
- 静的関数 insert_id() {
- return ($id = mysql_insert_id(self::$link)) >= 0 ? $id : self::$result(self::$query("SELECT last_insert_id()"), 0);
- }
- /**
- * 結果セットから列挙型配列として行を取得します
- *
- * @param object $query
- * @return array
- */
- 静的関数 fetch_row($query) {
- $query = mysql_fetch_row($query);
- $query を返す;
- }
- /**
- * 結果セットから列情報を取得し、オブジェクトとして返します
- *
- * @param object $query
- * @return object
- */
- 静的関数 fetch_fields($query) {
- return mysql_fetch_field($query);
- }
-
- 静的関数 select_affectedt_rows($rs){
- return mysql_affected_rows($rs,self::$link);
-
- }
- /**
- * mysql バージョンを返す
- *
- * @return string
- */
- 静的関数 version() {
- return mysql_get_server_info(self) ::$リンク);
- }
- /**
- * 近い接続
- *
- * @return bool
- */
- 静的関数 close() {
- return mysql_close(self::$link);
- }
- /**
- * エラーメッセージを出力します
- *
- * @param string $message
- * @param string $sql
- */
- static function halt($message = "", $sql = "") {
- @header("Content-type: text/html; charset=utf-8");
-
- if (DEBUG==1){
- $debug = debug_backtrace();
- echo $message 。 "rn
SQL--> " . $sql."rn ERROR_MESSAGE-->".self::error().
- "rn
--------------デバッグ--- -----------rn ";
- self::echoarray($debug);
- echo "rn
----------- -デバッグ終了----------------";
-
- }else{
- echo 'SQL エラー';
- }
- @self::rollback();
- exit;
- }
- ///////////////////// ////////以下は展の sql メソッドです。//////
- /* 数組照合 key value value の对应系插入データテーブル中
- テーブルに必要なデータテーブル
- 要注意メソッドは自己给表に追加されたものです。
- */
- static function insert($table,$array){
- $temp="";$temp2='';
- foreach($array as $key=> $value){
- if(self::$is_type_tight){
- if(is_string($value)){
- $temp .="$key,";$temp2 .="'$value',";
- }elseif (is_int($value||is_null($value)||is_float($value))){
- $value+=0;
- $temp .="$key,";$temp2 .="'$value'," ;
- }
- }else{
- $temp .="$key,";$temp2 .="'$value',";
- }
- }
- $temp = substr($temp,0,strlen($temp) -1);
- $temp2 = substr($temp2,0,strlen($temp2)-1);
-
- $sql = "INSERT INTO $table ($temp) VALUE($temp2)";
- return self:: query($sql);
- }
-
-
- 静的関数 del($table,$where){
- $sql = "DELETE FROM {$table} where {$where}";
- return self::query($sql) ;
- }
-
- static 関数 update($table,$array,$where){
- foreach ($array as $key=>$value){
- $temp .= "$key='$value',";
- }
- $temp = substr($temp,0,strlen($temp)-1);
- $sql = "update {$table} set ($temp) where {$where} ";
- return self::query " where:XXX" は where 条件です;
- 如果写上 "xxx" 如意は键值
- 如果写上 "by:XXX" は排序
- 如果写上 "limit:xxx,xxx" は分页です
-
- #パラメータ不正确则はfalseを返します; 成功した場合は評価後の数組;
- */
- static function select(){
- $numargs = func_num_args();//获取パラメータ数;
- $where = "";$key="";$limit=" ";$by="";
- if($numargs==0){return false;}
- //echo $numargs;
- if($numargs>=2){
- $arg_list = func_get_args();
- $table = $arg_list[0];
- unset($arg_list[0]);
- // print_r($arg_list);
- foreach($arg_list as $k=>$value){
- if(preg_match("#^( where:)w#",$value)){
- $temp =explode(":",$value);
- $where = "WHERE {$temp[1]} " ;
- }elseif(preg_match("#^ by:w#",$value)){
- $temp =explode(":",$value);
- $by = "{$temp[1]} で注文" ;
- }elseif(preg_match("#^ limit:w#",$value)){
- $temp =explode(":",$value);
- $limit = "limit {$temp[1]}";
- }else{
- $key .= " $value,";
- }
- }
-
- if($key==""){
- $key = "*";
- }else{
- $key =substr($key,0,strlen($key)- 1);
- }
-
- $sql_base="SELECT $key FROM $table";
- }
- if(!empty($where)){
- $sql_base .= " $where";
- }
- if(!empty($by) ){
- $sql_base .= " $by";
- }
- if(!empty($limit)){
- $sql_base .= " $limit";
- }
- //echo $sql_base;
- //echo $by ;
- $rs = self::query($sql_base);
- $re=array();
- if(self::num_rows($rs)>=1){
- while($info = self::fetch_array($rs)){
- $re[]=$info;
- }
- }
- self::free_result($rs);
- return $re;
- }
-
-
- /*回滚事务*/
- static function rollback(){
- self::query('rollback');
- }
- /*开始事务*/
- static function begin(){
- self::query('SET AUTOCOMMIT =0'); //停止用自動提交;
- self::query('BEGIN') ;//开始一事务;
- }
-
- /*提交事务*/
- static function commit(){
- self::query('commit' );
- }
-
-
- 静的関数 echoarray($array){
- foreach($array as $k=>$v ){
- if(is_array($v)){
- if(is_array($v)){
- エコー "
-------------------------------- ";
- self::echoarray($v);
- }
- }else{
- if($k==='line')
- echo "$k -> " .$ v." ";
- else
- echo "$k -> " .$v." ";
- }
- }
- }
-
- function get_server_info(){
- return mysql_get_server_info();
- }
-
-
- //下は应付大データの表の拡張蟥询です
-
- /*
- big_select は大规模用の蟥询に適合し、覆いインデックスを利用して大幅なオフセット活性化口、令状は覆いインデックス上に偏移されません。すべてのデータで、データ上の msql を減らし、他のデータを追加すると、効率が向上します。ただし、小規模なデータの場合は、この逆に、制限が 100 に達すると、その結果、強度が増加します。 00 ,20;mysql 会先查出 10020 条データさらに 10000 この操作代は非常に大きく、この関数を利用することで高い効果が得られますが、結果が制限 20 である場合、那就会稍微比直接選択遅いいくつか
- @table 文字列要監査対象の表 例: "table1"
- @keys string 要監査対象の鍵,複数の鍵使用","分割 例:"key1,key2,key3" 结束不含","少量用"*" およびいくつかの鍵请加上`;
- @Index string 主インデックス键または唯一のインデックス键名、ただ必要な 1 つの例 "id";
- @pagesize int 分页大小、必须、你不会想这么多数データ全部出来吧
- @pageNo 页コード、从0开開始
- @orderby string 排序 例: "id desc";可空,ただし不建议空
- @where 文字列条件 例: "date>122424533" 可空
- # 返回数组
- */
- static function big_select($table,$キー,$index,$pagesize,$pageNo,$orderby=NULL,$where=NULL){
- $start=$pageNo*$pagesize;
- if($where){
- $sqlIndex="SELEECT {$index} from {$table} where {$where}";
- }else{
- $sqlIndex="SELEECT {$index} from {$table}";
- }
- if($orderby){
- $sqlIndex .=" ORDER BY { $orderby} $start,$pagesize を制限します";
- }else{
- $sqlIndex .=" ORDER BY Limit $start,$pagesize";
- }
- $sql = "SELECT $keys FROM {$table} INNER JOIN({$sqlIndex}) AS lim USING({$index} })";
-
- $rs = self::query($sql);
-
- $re=array();
- if(self::num_rows($rs)>=1){
- while($info = self::fetch_array($rs)){
- $re[]=$info;
- }
- }
- self::free_result($rs);
- return $re;
-
- }
- /* 如果一个很大的データ(万行よりも大きい予定) 削除される動作周期は長すぎるため、そのテーブルまたは実行に長時間かかると、起動されていないデータがいくつか削除されます。 以下の方法は、大量の SQL タスクを実行することです。小さい (1 回あたり 5000 行) が、次の操作により空きスロット期間中に新しいデータが挿入される可能性がありますが、新しいデータは十分な条件により削除される可能性があります。この方法では時間が経過するとすぐに失われます。の表名
- @where 文字列条件は省略可能
- #int 删除削除の行数
- */
- static function big_del($table,$where){
- set_time_limit(0);
- $sql="{$table} から削除where {$where} 制限 5000";
- $rows = 0;
- $eff=0;
- do{
- self::query($sql);
- $rows=self::affected_rows();
- $eff += $rows;
- }while($rows>0);
- return $eff;
- }
- }
-
-
- ?>
-
-
复制代
|