存档

文章标签 ‘数据库’

php操作mysql的普通类和pdo类,2者几乎可兼容升级。

2020年8月7日 没有评论

20210119优化版

<?php
/*
普通调用:
require 本类;
$mydb=new myDb($dbname);//$dbname为数据库名称
项目调用:
M()->query();//参考func/global.php中的function M();
*/
class myDb{
	private $Link_ID=0;
	private $PDOStatement;//执行失败时设置为false
	private $Db='';
	private $host=array();
	private $debugMode=false;
	private $debugParams=array();
    private $debugSql='';

	function __construct($db='',$host=array()){
		if(defined('MYSQL_ERROR') && MYSQL_ERROR===true){//判断是否允许debug
			$this->debugMode=true;
		}
		$this->Db=$db;
		$this->host=$host;
		if(count($host)<=0){
			$dbconfig=dirname(dirname(__FILE__)).'/config/global/db.php';
			if(is_file($dbconfig)){
				require_once $dbconfig;
				$this->host=$GLOBALS['dbHost']['default'];
			}
			else {exit('undefind db');}
		}
		//不执行mysql链接,因为考虑到包含文件并不一定需要使用到mysql,由相关方法里面自行执行
		//$this->connect();
	}
	
	function connect(){
		if(!$this->Link_ID){
			try{
				$this->Link_ID=new PDO('mysql:host='.$this->host[0].';dbname='.$this->Db.';charset='.$this->host[3],$this->host[1],$this->host[2]);
				/*
				考虑到我们的app以前客户端都是以字符串进行处理的,所以会造成新版写入缓存的时候是整型,客户端老版api返回后客户端会死掉,在新app的api接口没更换之前,先注释
				查询mysql返回字段int变为String型解决方法
				$this->Link_ID->setAttribute(PDO::ATTR_STRINGIFY_FETCHES,false);
				$this->Link_ID->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);//启用或禁用预处理语句的模拟。默认true.如果设置false,可以在prepare阶段抛出不会终止程序的"Mysql error".
				===说明:
				上方$this->Link_ID->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);注释之后,则为默认值true,会导致$this->debugMode的时候无法抛出"Mysql error"
				可以增加一处设置:$this->Link_ID->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
				PDO::ATTR_ERRMODE的值请参考:https://www.php.net/manual/zh/pdo.setattribute.php
				所以当PDO::ATTR_EMULATE_PREPARES为false,且PDO::ATTR_ERRMODE为PDO::ERRMODE_EXCEPTION的时候,抛PDOException错误(可捕获)
				*/
				//if($this->debugMode){不用这样判断,否则会导致无法获取异常信息,在需要显示异常信息的地方判断即可
					$this->Link_ID->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                //}
			}
			catch(PDOException $e){$this->Link_ID=0;die('mysql connect error...');}
			$this->Link_ID && $this->Link_ID->query('set names '.$this->host[3].';');
		}
	}
	
	/**
     * 执行查询
     * @param string $sql
     * @param array $params 参数['column'=>$value,...]
     * @return bool
     */
	function query($sql='',$params=array()){
		if(empty($sql)){return false;}
		$this->connect();
		$queryOK=false;
		if($this->debugMode===true){
			$this->debugSql=$sql;
			$this->debugParams=$params;
		}
		//try catch需要配合`PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION`使用
        try{
            $PDOStatement=$this->Link_ID->prepare($sql,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL));//返回 PDOStatement / False
            if($PDOStatement){
                //不能用$PDOStatement->execute($params);如果有int类型会报错
                //应该用PDOStatement::bindValue()去绑定(注意: 不要用bindParam())
                foreach($params as $key=>$value){
                    $PDOStatement->bindValue(':'.$key,$value,$this->getPdoValueType($value));//类型需要判断
                }
				$queryOK=$PDOStatement->execute();//bool
            }
			$this->PDOStatement=$PDOStatement;
        }
		catch(PDOException $e){
			$this->PDOStatement=false;//异常也要设置为false
            if($this->debugMode){
				//explainPDOException会打印原型pdo语句,所以getDebugSql(true)可以打印拼接后的(默认为true打印拼接后的sql)
                exit('<pre>'.implode(PHP_EOL,$this->explainPDOException($e)).'</pre>'.PHP_EOL.'<br />SQL: '.$this->getDebugSql());
            }
        }
		return $queryOK;
	}
	
	/**
     * 单条数据插入 (pdo绑定参数)
     * @param string $table
     * @param array $data 数据['column'=>$value,...]
     * @return bool
     */
	function insert($table,$data){
	    $arr_column=array_keys($data);
        return $this->query('insert into '.$table.'('.implode(',',$arr_column).')values('.(':'.implode(',:',$arr_column)).')',$data);
    }
	
	/**
     * 获取上次插入的id
     * @return int|0
     */
	function insert_id(){
		if(!$this->PDOStatement){return 0;}
		return intval($this->Link_ID->lastInsertId());
	}
	
	/**
     * 单条数据插入并返回自增id (pdo绑定参数)
     * @param string $table
     * @param array $data 数据['column'=>$value,...]
     * @return int|0
     */
	function insert_get_id($table,$data){
	    $this->insert($table,$data);
		return $this->insert_id();
    }
	
	/**
     * 查询多笔记录
     * @param string $sql
     * @param array $params
     * @return array 有结果时返回二维数组, 无则返回空数组 []
     */
	function query_all($sql='',$params=array()){
		if(!$this->query($sql,$params)){return array();}//不能直接return 0;否则当结果为零条的时候前端会出错
		return $this->PDOStatement->fetchAll(PDO::FETCH_ASSOC);
	}

	/**
     * 查询一笔记录
     * @param string $sql
     * @param array $params
     * @return array|false 有记录则返回一维数组, 无则返回 false
     */
	function query_first($sql='',$params=array()){
		if(!$this->query($sql,$params)){return false;}
		return $this->PDOStatement->fetch(PDO::FETCH_ASSOC);
	}

	/**
     * 获取影响的行数
     * @return int|0
     */
	function num_affected_rows(){
		if(!$this->PDOStatement){return 0;}
		return $this->PDOStatement->rowCount();
	}
	
	function beginTransaction(){$this->connect();$this->Link_ID->beginTransaction();}//开启事务
	
	function rollBack(){$this->Link_ID->rollBack();}//回滚事务
	
	function commit(){$this->Link_ID->commit();}//提交事务

	private function getPdoValueType($value){
        if(is_int($value)){return PDO::PARAM_INT;}
		else if(is_bool($value)){return PDO::PARAM_BOOL;}
		else if(is_null($value)){return PDO::PARAM_NULL;}
		else{return PDO::PARAM_STR;}
    }
	
	private function explainPDOException($ex){
        //code, message, file, line, trace
	    $arr=[];
	    $arr[]='PDOException:'.$ex->getCode().':'.$ex->getMessage();
	    $arr[]='File:'.$ex->getFile().':'.$ex->getLine();
	    $i=0;
	    //这里不用$ex->getTraceAsString(), 而是直接获取trace
		//file, line [,class, type], funcion, args[0,1,2,...]
	    foreach($ex->getTrace() as $row){
            $arr2=[];
            $arr2[]=$row['file'].'('.$row['line'].'):';
            if(isset($row['class'])){$arr2[]=$row['class'].$row['type'];}
            $arr2[]=$row['function'];
            if(isset($row['args']) && !empty($row['args'])){//参数 args
                $arr2[]='(';
                $k=0;
                foreach($row['args'] as $arg){
                    if($k>0){$arr2[]=',';}
                    if(is_array($arg)){$arr2[]='['.trim(json_encode($arg,256),'{}').']';}
					elseif(is_scalar($arg)){
                        if(is_string($arg)){$arr2[]='\'' .htmlspecialchars($arg).'\'';}
						else{$arr2[]=htmlspecialchars((string)$arg);}
                    }
					else{}//其他参数类型,暂时忽略
                    $k++;
                }
                $arr2[]=')';
            }
            $arr[]='#'.((string)$i).' '.implode('',$arr2);
            $i++;
        }
	    return $arr;
    }
		
	//打印sql语句($pdoAfter为false时候,打印pdo原型,比如:select * from table where ip=:ip
    function getDebugSql($pdoAfter=true){
		if($this->debugMode===true){
			if(!$pdoAfter){return $this->debugSql;}
			foreach($this->debugParams as $k=>$v){
				$this->debugParams[':'.ltrim($k,':')]=$v;
				unset($this->debugParams[ltrim($k,':')]);
			}
			$debugSql=$this->debugSql;
			$debugParams_vals=array_values($this->debugParams);
			$r=true;
			$index=0;
			while($r){
				$r=stristr($debugSql,'?');
				if(!empty($r)){
					empty($debugParams_vals[$index]) && $debugParams_vals[$index]='NULL';
					if(!is_numeric($debugParams_vals[$index])){$debugParams_vals[$index]=addslashes($debugParams_vals[$index]);}
					$debugSql=preg_replace('/\?/','\''.$debugParams_vals[$index].'\'',$debugSql,1);
					$index++;
				}
			}
			$t=$this->debugParams;//php7可以直接在preg_replace_callback内部使用
			return preg_replace_callback('/:[0-9a-zA-Z_]+/i',function($m) use ($t){
				$v=$t[$m[0]];
				if($v===null){return 'NULL';}
				if(!is_numeric($v)){$v=addslashes($v);}
				return "'{$v}'";
			},$debugSql);
		}
        else {return 'no sql will return if undefind MYSQL_ERROR or MYSQL_ERROR!=true';}
    }
}

先贴上mysql的普通类

<?php
class mydb{
	private $Record=array();
	private $Link_ID=0;
	private $Query_ID=0;
	private $Db;
	function __construct($db){	
		$this->Db=$db;
        $this->Link_ID=0;
	}
	function connect(){
		if(!$this->Link_ID){
			$this->Link_ID=mysql_connect('localhost','root','123456');
			mysql_select_db($this->Db,$this->Link_ID);
			mysql_query("set names 'utf8'",$this->Link_ID);
		}
    }
	function insert_id(){
		$this->connect();
		return mysql_insert_id($this->Link_ID);
	}
	function query($sql){
		$this->connect();
		$this->Query_ID=mysql_query($sql);
		return $this->Query_ID?$this->Query_ID:0;
	}
	function next_record() {
		if(!$this->Query_ID) {return 0;}
		$this->Record=mysql_fetch_assoc($this->Query_ID);
		return is_array($this->Record)?$this->Record:0;
	}
	function query_first($sql){  
		if(!$this->query($sql)) {return 0;}
		$this->Record=mysql_fetch_assoc($this->Query_ID);
		return $this->Record;
	}
	function num_rows() {return mysql_num_rows($this->Query_ID);}
	function num_affected_rows() {return mysql_affected_rows();}
	function f($field) {return $this->Record[$field];}
}
?>

再贴上mysql pdo的类

<?php
/*
普通调用:
require 本类;
$mydb=new myDb($dbname);//$dbname为数据库名称
项目调用:
M()->query();//参考func/global.php中的function M();
*/
class myDb{
	private $Record=array();
	private $Link_ID=0;
	private $Query_ID=0;
	private $Db='';
	private $host=array();
	private $debugMode=false;
	private $debugParams=null;
    private $debugSql='';

	function __construct($db='',$host=array()){
		//判断是否允许debug
		if(defined('MYSQL_ERROR') && MYSQL_ERROR===true){
			$this->debugMode=true;
		}
		
		$this->Db=$db;
		$this->Link_ID=0;
		$this->host=$host;
		
		if(count($host)<=0){
			$configPath=dirname(dirname(__FILE__));
			$dbconfig=$configPath.'/config/global/db.php';
			if(is_file($dbconfig)){
				require_once $dbconfig;
				$this->host=$GLOBALS['dbHost']['default'];
			}
			else exit('undefind db');
		}
	}
	
	function connect(){
		if(!$this->Link_ID){
			try{
				$this->Link_ID=new PDO('mysql:host='.$this->host[0].';dbname='.$this->Db.';charset='.$this->host[3],$this->host[1],$this->host[2]);
				//查询mysql返回字段int变为String型解决方法
				$this->Link_ID->setAttribute(PDO::ATTR_STRINGIFY_FETCHES,false);
				$this->Link_ID->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
			}
			catch(PDOException $e){$this->Link_ID=0;die('mysql connect error...');}
			$this->Link_ID && $this->Link_ID->query('set names '.$this->host[3].';');
		}
	}
	
	function query($sql='',$params=array()){
		if($sql==''){return false;}
		$queryOK=true;
		$this->connect();
		if($this->debugMode===true){
			$this->debugSql=$sql;
			$this->debugParams=$params;
		}
        $PDOStatement=$this->Link_ID->prepare($sql,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL));//返回 PDOStatement / False
		if(!$PDOStatement){
			$queryOK=false;
		}
		else {
			if(count($params)>0){
				//不能用$queryOK=$this->Query_ID->execute($params);如果有int类型会报错
                //应该用PDOStatement::bindValue()去绑定(注意: 不要用bindParam())
                foreach($params as $key=>$value){
                    $PDOStatement->bindValue(':'.$key,$value,$this->getPdoValueType($value));//类型需要判断
                }
			}
			$queryOK=$PDOStatement->execute();
		}
		if($queryOK===false && $this->debugMode===true){
			$this->queryError();
		}
        $this->Query_ID=$PDOStatement;
		return $queryOK;
	}
	
	function queryError(){
		$errorInfo=$this->Link_ID->errorInfo();
		if($errorInfo[2]!==null) {
			$debug_backtrace=debug_backtrace();
			$last_error_line=array('file' => __FILE__);
			while(__FILE__==$last_error_line['file']){
				$last_error_line=$debug_backtrace[0];
				array_shift($debug_backtrace);
			}
			echo '<br /><b>Mysql error</b>: '.$errorInfo[2].' <b>in '.$last_error_line['file'].':line '.$last_error_line['line'].'</b><br />';
		}
	}
	
	function getPdoValueType($value){
        if(is_int($value)){return PDO::PARAM_INT;}
        else if(is_null($value)){return PDO::PARAM_NULL;}
		else if(is_bool($value)){return PDO::PARAM_BOOL;}
		else{return PDO::PARAM_STR;}//string
    }
	
	//单条数据插入,$data为数组结构,比如array('title'=>$title,'content'=>$content)
	function insert($table,$data){
	    $arr_column=array_keys($data);
        return $this->query('insert into '.$table.'('.implode(',',$arr_column).')values('.(':'.implode(',:',$arr_column)).')',$data);
    }
	
	//单条数据插入,$data为数组结构,比如array('title'=>$title,'content'=>$content)
	function insert_get_id($table,$data){
	    $this->insert($table,$data);
	    return $this->insert_id();
    }

	function next_record(){
		if(!$this->Query_ID){return 0;}
		$this->Record=$this->Query_ID->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT);
		return is_array($this->Record)?$this->Record:0;
	}
	
	function query_all($sql='',$params=array()){
		if(!$this->query($sql,$params)){return array();}//不能直接return 0;否则当结果为零条的时候前端会出错
		$this->Record=$this->Query_ID->fetchAll(PDO::FETCH_ASSOC);
		return $this->Record;
	}
	
	function query_first($sql='',$params=array()){
		if(!$this->query($sql,$params)){return 0;}
		$this->Record=$this->Query_ID->fetch(PDO::FETCH_ASSOC);
		return $this->Record;
	}
	
	function insert_id(){$this->connect();return $this->Link_ID->lastInsertId();}

	function num_rows(){return count($this->Query_ID->fetchAll());}
	
	function num_affected_rows(){return $this->Query_ID->rowCount();}
	
	function f($field){return $this->Record[$field];}
	
	function beginTransaction(){$this->connect();$this->Link_ID->beginTransaction();}//开启事务
	
	function rollBack(){$this->connect();$this->Link_ID->rollBack();}//回滚事务
	
	function commit(){$this->connect();$this->Link_ID->commit();}//提交事务

	//打印sql语句($pdoAfter为false时候,打印pdo原型,比如:select * from table where ip=:ip
    function debugSql($pdoAfter=true){
		if($this->debugMode===true){
			if(!$pdoAfter){
				return $this->debugSql;
			}
			foreach($this->debugParams as $k=>$v){
				$this->debugParams[':'.ltrim($k,':')]=$v;
				unset($this->debugParams[ltrim($k,':')]);
			}
			$debugSql=$this->debugSql;
			$debugParams_vals=array_values($this->debugParams);
			$r=true;
			$index=0;
			while($r){
				$r=stristr($debugSql,'?');
				if(!empty($r)){
					empty($debugParams_vals[$index]) && $debugParams_vals[$index]='NULL';
					is_numeric($debugParams_vals[$index]) or $debugParams_vals[$index]=addslashes($debugParams_vals[$index]);
					$debugSql=preg_replace('/\?/','\''.$debugParams_vals[$index].'\'',$debugSql,1);
					$index++;
				}
			}
			$t=$this->debugParams;//php7可以直接在preg_replace_callback内部使用
			return preg_replace_callback('/:[0-9a-zA-Z_]+/i',function($m) use ($t){
				$v=$t[$m[0]];
				if($v===null){
					return 'NULL';
				}
				is_numeric($v) or $v=addslashes($v);
				return "'{$v}'";
			},$debugSql);
		}
        else {return 'no sql will return if undefind MYSQL_ERROR or MYSQL_ERROR!=true';}
    }
}
分类: mysql优化 标签: , ,

android安卓如何操作sqllite,增删改查+自定义类

2015年11月27日 没有评论

package util.base;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import data.config.Constants;

public class MysqlDo {

private MysqlDb mysqldb = null;
private SQLiteDatabase database = null;
private boolean flag = false;

public class MysqlDb extends SQLiteOpenHelper {

public MysqlDb(Context context, int version, String db) {
super(context, db, null, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
“Create table user_avatar_name(id integer primary key autoincrement,uid int(11) NOT NULL DEFAULT 0,avatar varchar(255),nickname varchar(255))”);
db.execSQL(“create index if not exists key1 on user_avatar_name(uid)”);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}

}

public MysqlDo(Context context, int version) {
try {
/*
String db = null;
if (Constants.sdCardExist == true) {
db = Constants.baseFilePath + “dataBase”;
File dbDirectory = new File(db);
if (!dbDirectory.exists()) {
dbDirectory.mkdirs();
}
}
if (db != null) {
db = db + File.separator + Constants.sqlDbName;
} else {
db = Constants.sqlDbName;
}
*/
mysqldb = new MysqlDb(context, version, Constants.sqlDbName);
} catch (Exception e) {
} finally {
if (database != null) {
database.close();
}
}
}

public boolean addRecord(String sql, Object[] mValue) {
flag = false;
try {
database = mysqldb.getWritableDatabase();
database.execSQL(sql, mValue);
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (database != null) {
database.close();
}
}
return flag;
}

public boolean deleteRecord(String sql) {
flag = false;
try {
database = mysqldb.getWritableDatabase();
database.execSQL(sql);
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (database != null) {
database.close();
}
}
return flag;
}

public boolean updateRecord(String sql, Object[] mValue) {
flag = false;
try {
database = mysqldb.getWritableDatabase();
database.execSQL(sql, mValue);
flag = true;
} catch (Exception e) {
} finally {
if (database != null) {
database.close();
}
}
return flag;
}

public Map<String, String> viewSingleRecord(String sql) {
Map<String, String> map = new HashMap<String, String>();
try {
database = mysqldb.getReadableDatabase();
Cursor cursor = database.rawQuery(sql, null);
if (cursor.getCount() > 0) {
int columns = cursor.getColumnCount();
while (cursor.moveToNext()) {
for (int i = 0; i < columns; i++) {
String cols_name = cursor.getColumnName(i);
String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));
if (cols_value == “”) {
cols_value = “”;
}
map.put(cols_name, cols_value);
}
}
cursor.close();
return map;
} else {
return null;
}
} catch (Exception e) {
} finally {
if (database != null) {
database.close();
}
}
return null;
}

public List<Map<String, Object>> viewListRecord(String sql) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
database = mysqldb.getReadableDatabase();
Cursor cursor = database.rawQuery(sql, null);
if (cursor.getCount() > 0) {
int columns = cursor.getColumnCount();
while (cursor.moveToNext()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < columns; i++) {
String cols_name = cursor.getColumnName(i);
String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));
if (cols_value == “”) {
cols_value = “”;
}
map.put(cols_name, cols_value);
}
list.add(map);
}
cursor.close();
return list;
} else {
return null;
}
} catch (Exception e) {
} finally {
if (database != null) {
database.close();
}
}
return null;
}

}

 

上面是自定义的操作类

下面是使用方法:

private MysqlDo mysqlDo = null;

mysqlDo = new MysqlDo(context, Constants.mysqlVersion);

 

Map<String, String> rs = mysqlDo.viewSingleRecord(
“select * from user_avatar_name where uid=” + obj.getInt(“uid”) + ” limit 1″);
if (rs != null) {
mysqlDo.updateRecord(“update user_avatar_name set avatar=?,nickname=? where uid=?”,
new Object[] { obj.getString(“avatar”), obj.getString(“nickname”),
obj.getInt(“uid”) });
} else {
mysqlDo.addRecord(“insert into user_avatar_name(uid,avatar,nickname) values(?,?,?)”,
new Object[] { obj.getInt(“uid”), obj.getString(“avatar”),
obj.getString(“nickname”) });
}

分类: android 标签: ,

我的数据库弄丢了

2013年5月22日 没有评论

08:53 icyzhl:哪里是我的mysql数据库?
8点53 icyzhl:数据库?
08:53迈克·阿特金斯:你好,谢谢你接触活聊天,我们很高兴有机会为您提供帮助!这次谈话在任何时候,如果你没有收到我一个较长时间的响应,有可能您已断开。如果发生这种情况,我们会自动伸出你通过票,或再次尝试,并开始聊天。另外,如果你觉得你是不是接受相应级别的支持,请联系qa@arvixe.com引用此聊天消息。如何我可以协助你今天好吗?
8点53 icyzhl:你告诉我,我不会失​​去我的数据库
08:54 icyzhl:但现在怎么办?我不能让我的数据库
08:54 icyzhl:你失去了我的mysql数据库
08:55 icyzhl的:门票:#ZWC-719-56860
08:55 icyzhl:你在哪里
08:55 icyzhl:在跟我说话
08:56迈克·阿特金斯:我检查了一下,请
08:56迈克·阿特金斯:我将尽快更新
随时更新08:56 icyzhl:更新?更新?更新?
08:57 icyzhl:约24小时过去,你知道吗?
08:58迈克·阿特金斯:让我检查ZWC-719-56860
08:59 icyzhl:我很痛苦,因为你的服务。
09:00迈克·阿特金斯:我感到非常遗憾的麻烦
09:00迈克·阿特金斯:照顾这个问题,并确保它不会再次发生,我已要求我们的值班经理和水平支持工程师
09:01迈克·阿特金斯:如果问题仍然存在,我们将移动到不同的服务器,无需任何额外的成本或停机
09:02 icyzhl:狗屎
09:03 icyzhl:我只想要回我的mysql数据库。
09:05迈克·阿特金斯:确定先生
09:06 icyzhl:它是如此重要,我
09:11 icyzhl:我很生气
09:11迈克·阿特金斯:我向你保证,我不会留下任何石头,不遗余力地为您提供永久修复此问题
09:11迈克·阿特金斯:我感到非常遗憾,我完全可以实现的挫折,你可能有
9点13 icyzhl:我不在乎,只是让我看到我的数据库
09:14迈克·阿特金斯:OK
09:14迈克·阿特金斯:你会很快得到答复,在同票
9点15 icyzhl:多久。
09:16迈克·阿特金斯:让我从我们的管理员确认有关埃塔
09:18 icyzhl:如果你没有得到我的数据库,我将让我的朋友在美国控告你的公司,我很认真
09:27迈克·阿特金斯:我很抱歉我们没有埃塔这个问题,我们的管理员仍是收集足够的信息,以尽快解决这个问题
09:28 icyzhl:无论什么时候,回来给我让我的数据库。
09:29 icyzhl:我在等待
09:30迈克·阿特金斯:肯定的,先生,你会得到一个答复相同的票
09:31 icyzhl:不要关闭这个窗口,我跟你。
09:32 icyzhl:在线等待
09:35迈克·阿特金斯:对不起,我不是在这个问题上的工作,但现在我们的管理工作,他将通过电子邮件更新,我感到非常抱歉,我没有埃塔这个问题要解决,所以我不能提供更新在现场聊天
09:37迈克·阿特金斯:你有你的本地计算机的备份你的数据库?
09:37 icyzhl:
09:37 icyzhl:如果我有备份,我可以恢复它自己。
09:40 icyzhl:似乎你REALY失去我的数据库
09:41 icyzhl:我的上帝
09:45 icyzhl:你在那里?
09:45迈克·阿特金斯:是
09:46 icyzhl:你现在打算怎么办
09:47 icyzhl:告诉我真相
09:47迈克·阿特金斯:我们缺少一些数据库服务器上的
09:47迈克·阿特金斯:让我为您提供的名单
迈克·阿特金斯:ahfreebike 09:49,ahmne ahzhonglian … hbl168 … hffzdz hfhpj hfkel qys001 sfqtw sunjoybag zzhuo
09:49迈克·阿特金斯:这些DBS失踪
09:49 icyzhl是
09:50 icyzhl:你失去了这些DBS
09:50 icyzhl:让我告诉你一件事
09:50迈克·阿特金斯:不幸的是,这些DBS是没有更多的可用服务器上的
9时51 icyzhl:你恢复我的数据库yestoday
09:52 icyzhl:所有DBS现在是在我的主机,你也失去了它的数据。
09:52迈克·阿特金斯:昨天,DB服务没有被启动和我开了票来解决这个问题
09:52 icyzhl:如DB:jclczx
09:53 icyzhl:一些数据失去了太多。
09:54 icyzhl的吧?
09:55迈克·阿特金斯:
09:55 icyzhl:得到我的数据库,这是我的底线。
09:56 icyzhl:我有用户托管一年以上。
09:56 icyzhl:我告诉每一个良好的arvixe myselft的托管。
09:57 icyzhl:我还告诉给我的朋友。
9时57 icyzhl:但现在,你失去了我的数据库。
09:58迈克·阿特金斯:我们对这一事件表示遗憾
09:58迈克·阿特金斯:我们真的很感谢你在这方面的合作
09:58 icyzhl:11个数据库和某些景致
9时59 icyzhl:只是告诉我,你打算怎么做。
10:01 icyzhl:难道你不知道该客户的数据是比一切都重要吗?
10:02 icyzhl:我怎么能向我的客户解释?
10:03迈克·阿特金斯:我感到非常抱歉,我们的客户数据是我们的一切,我们在这里为您提供安全可靠的托管
10:03迈克·阿特金斯:这是一个悲伤的事件和我们的管理员正在努力寻找这个问题的路线的原因
10:03迈克·阿特金斯:我们将更新您的完整信息,在同一张车票
10:05 icyzhl:我不需要任何理由,对这个问题的路线的原因
10时06 icyzhl:我想知道你是否能回我的数据库?
10时10 icyzhl:先生?
10:11迈克·阿特金斯:请稍等
10:15 icyzhl:好吧,我等着
10:17迈克·阿特金斯:看起来像数据所取代。从几个小时前有一个data.old的,其中至少包含其中的一些。 IB *有关DB文件夹,将需要安装到另一个MySQL实例和倾倒他们,假设他们没有损坏摆在首位。
10:19 icyzhl:这样呢?
10时26 icyzhl:你是否能回我的数据库?
10:26迈克·阿特金斯:我们正试图恢复它们
10:27 icyzhl:您必须为我做的
10:28 icyzhl:它是如此重要,我
10:30迈克·阿特金斯:我的转变是几乎结束了,你会得到更多的细节,通过同一张车票
10:30迈克·阿特金斯:如果你接触到另一个聊天的人,请参考他的票,并要求他检查金Middletwon
10:30迈克·阿特金斯:金是我们的值班经理和3级支持
10:30迈克·阿特金斯:从任何其他代理,你会得到完整的细节,他们将您的问题有完整的历史

分类: mysql优化 标签:
css.php