mb_substr中文的截取小知识

 更新时间:2016年11月25日 16:36  点击:1619
mb_substr函数是substr函数的升级版,mb_substr支持中文截取并且不会出现乱码问题,下面我来介绍一下mb_substr基础知识。

 代码如下 复制代码

<?php
$str = ‘这样一来我的字符串就不会有乱码^_^’;
echo “mb_substr:” . mb_substr($str, 0, 7, ‘utf-8′);
//结果:这样一来我的字
echo “<br>”;
echo “mb_strcut:” . mb_strcut($str, 0, 6, ‘utf-8′);
//结果:这样
?>

从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。


在实际使用过程中需要和mb_strlen配合使用,mb_strlen的使用方法和strlen类似,只是多了一个编码参数:mb_strlen("我是要被计算长度的字符", "gbk");结果是11。

详细的使用例子:

比如字符串超过20个就需要截取:

 代码如下 复制代码

if(mb_strlen($str, "gbk") >20)

{

  $str = mb_substr($str, 0, 20, "gbk");

}


注意:

确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从你Php安装目录extensions里拷入Windows/system32里面。

2.在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到
;extension=php_mbstring.dll把前面的;号去掉,这样mb_substr函数就可以生效了

在一般情况下如果我们要把excel数据库中的数据导入到mysql数据库我们没什么好办法实现了,但有了PHP Excel失控这后一切都变得简单了。

本代码是在thinkphp中开始使用的

1.引入类

 代码如下 复制代码

Vendor('PHPExcel.PHPExcel');//引入扩展类.就是/
        Vendor('PHPExcel.PHPExcel.IOFactory');
        Vendor('PHPExcel.PHPExcel.Reader.Excel5');

 

$excel_file= ROOT_PATH."/public/Uploads/".$publicity_bankdata_mod->where("id=".$data['id'])->getField('excel_file');
        //dump($excel_file);exit;
$objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
$objPHPExcel = $objReader->load($excel_file);//$uploadfile
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
$arr_result = array();
$strs=array();
$strs_datas=array();
$succ_result=0;
$error_result=0;


上面看上去有点乱,下面我来写一个完整的类

 

 代码如下 复制代码
<?php
set_time_limit(20000);
ini_set('memory_limit','-1');
require_once './PHPExcel.php';
require_once './PHPExcel/IOFactory.php';
require_once './PHPExcel/Reader/Excel5.php';
 
//使用pdo连接数据库
$dsn = "mysql:host=localhost;dbname=alumni;";
$user = "root";
$password = "";
try{
 $dbh = new PDO($dsn,$user,$password);
 $dbh->query('set names utf8;');
}catch(PDOException $e){
 echo "连接失败".$e->getMessage();
}
//pdo绑定参数操作
$stmt = $dbh->prepare("insert into alumni(gid,student_no,name) values (:gid,:student_no,:name) ");
$stmt->bindParam(":gid", $gid,PDO::PARAM_STR);
$stmt->bindParam(":student_no", $student_no,PDO::PARAM_STR);
$stmt->bindParam(":name", $name,PDO::PARAM_STR);
 
$objReader = new PHPExcel_Reader_Excel5(); //use excel2007
$objPHPExcel = $objReader->load('bks.xls'); //指定的文件
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
 
for($j=1;$j<=10;$j++)
{
 
$student_no = $objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();//第一列学号
$name = $objPHPExcel->getActiveSheet()->getCell("B".$j)->getValue();//第二列姓名
$gid = $objPHPExcel->getActiveSheet()->getCell("C".$j)->getValue();//第三列gid
}
//将获取的excel内容插入到数据库
$stmt->execute();
?>

php-excel-reader操作excel中的两个重要的方法:

1.dump(),它可以将excel内容以html格式输出:

echo $data->dump(true,true);

2.将excel数据存入数组中,使用$data->sheets,打印下如下:

 代码如下 复制代码

 

Array
(
[0] => Array
(
[maxrow] => 0
[maxcol] => 0
[numRows] => 5
[numCols] => 4
[cells] => Array
(
[1] => Array
(
[1] => 编号
[2] => 姓名
[3] => 年龄
[4] => 学号
)
[2] => Array
(
[1] => 1
[2] => 小红
[3] => 22
[4] => a1000
)
[3] => Array
(
[1] => 2
[2] => 小王
[3] => 33
[4] => a1001
)
[4] => Array
(
[1] => 3
[2] => 小黑
[3] => 44
[4] => a1002
)
[5] => Array
(
[2] => by
[3] => www.phpddt.com
)
)
[cellsInfo] => Array
(
[1] => Array
(
[1] => Array
(
[xfIndex] => 15
)
[2] => Array
(
[xfIndex] => 15
)
[3] => Array
(
[xfIndex] => 15
)
[4] => Array
(
[xfIndex] => 15
)
)
[2] => Array
(
[1] => Array
(
[string] => 1
[raw] => 1
[rectype] => unknown
[format] => %s
[formatIndex] => 0
[fontIndex] => 0
[formatColor] =>
[xfIndex] => 15
)
[2] => Array
(
[xfIndex] => 15
)
[3] => Array
(
[string] => 22
[raw] => 22
[rectype] => unknown
[format] => %s
[formatIndex] => 0
[fontIndex] => 0
[formatColor] =>
[xfIndex] => 15
)
[4] => Array
(
[xfIndex] => 15
)
)
[3] => Array
(
[1] => Array
(
[string] => 2
[raw] => 2
[rectype] => unknown
[format] => %s
[formatIndex] => 0
[fontIndex] => 6
[formatColor] =>
[xfIndex] => 23
)
[2] => Array
(
[xfIndex] => 23
)
[3] => Array
(
[string] => 33
[raw] => 33
[rectype] => unknown
[format] => %s
[formatIndex] => 0
[fontIndex] => 6
[formatColor] =>
[xfIndex] => 23
)
[4] => Array
(
[xfIndex] => 23
)
)
[4] => Array
(
[1] => Array
(
[string] => 3
[raw] => 3
[rectype] => unknown
[format] => %s
[formatIndex] => 0
[fontIndex] => 0
[formatColor] =>
[xfIndex] => 15
)
[2] => Array
(
[xfIndex] => 15
)
[3] => Array
(
[string] => 44
[raw] => 44
[rectype] => unknown
[format] => %s
[formatIndex] => 0
[fontIndex] => 0
[formatColor] =>
[xfIndex] => 15
)
[4] => Array
(
[xfIndex] => 15
)
)
[5] => Array
(
[2] => Array
(
[xfIndex] => 15
)
[3] => Array
(
[xfIndex] => 24
[hyperlink] => Array
(
[flags] => 23
[desc] => www.111cn.net

[link] => http://www.phpddt.co
)
)
)
)
)
[1] => Array
(
[maxrow] => 0
[maxcol] => 0
[numRows] => 0
[numCols] => 0
)
[2] => Array
(
[maxrow] => 0
[maxcol] => 0
[numRows] => 0
[numCols] => 0
)
)

自从php5.3之后系统就不支持mssql_connect这个函数连接了,以前我也讲可以使用com接口来实现,现在我再介绍解决php5.3不能连接mssql数据库另一方法。

windows系统下,PHP5.3以上的版本已经不支持mssql扩展。

首先http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx  点击 get it 下载SQLSRV20.EXE。

将文件解压到php的扩展文件夹ext下。

打开php.ini在结尾添加

[PHP_PDO_SQLSRV]
extension=php_pdo_sqlsrv_53_nts_vc6.dll
[PHP_SQLSRV]
extension=php_sqlsrv_53_nts_vc6.dll

保存后重启apache即可。附上简单的php连接的例子:

 代码如下 复制代码

<?php
$serverName = “(127.0.0.1)";
$connectionInfo = array( “UID"=>"root",
“PWD"=>"root2010",
“Database"=>"master");

$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
echo “Connection established.n";
}
else
{
echo “Connection could not be established.n";
die( print_r( sqlsrv_errors(), true));
}
?>

我使用的是wamp5.1集成安装包。在windows server 2008上面做的测试。php5.4以上版本测试没有成功。

如果使用这个扩展连接Sql server 2005以上版本的sql server(如sql server 2008),你还需要在机器上先安装 SQL Server Native Client :http://download.microsoft.com/download/0/E/6/0E67502A-22B4-4C47-92D3-0D223F117190/sqlncli.msi
这个扩展为php新增了一系列sqlsrv_开头的函数,函数参考如下:
sqlsrv_begin_transaction
sqlsrv_cancel
sqlsrv_client_info
sqlsrv_close
sqlsrv_commit
sqlsrv_configure
sqlsrv_connect
sqlsrv_errors
sqlsrv_execute
sqlsrv_fetch
sqlsrv_fetch_array
sqlsrv_fetch_object
sqlsrv_fetch_metadata
sqlsrv_free_stmt
sqlsrv_get_config
sqlsrv_get_field
sqlsrv_has_rows
sqlsrv_next_result
sqlsrv_num_fields
sqlsrv_num_rows
sqlsrv_prepare
sqlsrv_query
sqlsrv_rollback
sqlsrv_rows_affected
sqlsrv_send_stream_data
sqlsrv_server_info

更多详细的说明可以在刚才的自解压的文件中有个 SQLServerDriverForPHP.chm 帮助文件中可以找到打开后点击API Reference节点


另外看一种odb连接方式

 代码如下 复制代码

$dbhost = ”;
$dbuser = ”; //你的mssql用户名
$dbpass = ”; //你的mssql密码
$dbname = ”; //你的mssql库名
$connect=odbc_connect(“Driver={SQL Server};Server=$dbhost;Database=$dbname”,”$dbuser”,”$dbpass”);
$sql=”select * from content”;
$exec=odbc_exec($connect,$sql);
while($row = (odbc_fetch_array($exec)))
{
$row['id']   //?取字段值

}

php与mysql是天生的一对,下面我来介绍在php中怎么调用mysql存储过程并执行返回结果,下面我总结了一些常用的php调用MySQL存储过程的方法,有需要了解的同学可参考。

MySQL从5.0开始才引入存储过程,反正以前做应用的时候从没碰过,不过现在因为主要作内部系统,所以很多应用都用到了存储过程,当然前台有时候也需要调用MySQL存储过程,PHP的MySQL Lib好像支持的不是很好,不过我搜索了些资料,虽然不多,但是还是尝试的使用了,现在介绍一下方法


1。调用存储过程的方法。


a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql变量。


b。如果存储过程有OUT变量,声明一个Mysql变量。mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句。入set @mysqlvar=$phpvar ;


c。使用mysql_query()/mysql_db_query()执行mysql 变量声明语句。

 

 代码如下 复制代码

mysql_query("set @mysqlvar【=$pbpvar】");


这样,在mysql服务器里面就有一个变量,@mysqlar。如果时IN参数,那么其值可以有phpar传入。


d。 如果时存储过程。


1。执行 call procedure()语句。


也就是mysql_query("call proceduer([var1]...)");

 

2. 如果有返回值,执行select @ar,返回执行结果。

 

 代码如下 复制代码
mysql_query("select @var)"


接下来的操作就和php执行一般的mysql语句一样了。可以通过mydql_fetch_row()等函数获得结果。


下面我总结了一些调用存储过程的实例无参的存储过程

 代码如下 复制代码


$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
$sql = "
create procedure myproce()
begin
INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
end;
";
mysql_query($sql);//创建一个myproce的存储过程

$sql = "call test.myproce();";
mysql_query($sql);//调用myproce的存储过程,则数据库中将增加一条新记录。

型一:调用带输入、输出类型参数的方法

 代码如下 复制代码

$returnValue = '';
try {
 mysql_query ( "set @Return" );
 $spname = 'P__Test_GetInfo1';
 mysql_query ( "call $spname(@Return, '{$userId}', '{$pwd}')" ) or die ( "[$spname]Query failed:" . mysql_error () );
 $result_return = mysql_query ( "select @Return" );
 $row_return = mysql_fetch_row ( $result_return );
 $returnValue = $row_return [0];
} catch ( Exception $e ) {
 echo $e;
}
echo $returnValue; //输出来自存储过程中输出的变量

类型二:调用带多个输出类型和多个输入类型参数的方法

 代码如下 复制代码

$userId = 0;
try{
    mysql_query("set @Message");
    mysql_query("set @Id");
    mysql_query("call P__Test_Login(@Message, @Id, '{$userId}', '{$pwd}')", $conn) or die("Query failed:".mysql_error());
    $result_mess = mysql_query("select @Message");
    $result_uid = mysql_query("select @Id");
    $row_mess = mysql_fetch_row($result_mess);
    $row_uid = mysql_fetch_row($result_uid);
    $Proc_Error = $row_mess[0];
    $uId = $row_uid[0];
}
catch( Exception $e )
{
   echo $e;
}
echo 'proc return message:'$Proc_Error.'<br/>'; //输出来自存储过程中输出的变量
echo 'User id:'.$uId; //获取用户id

类型三:调用带返回结果集的方法

 代码如下 复制代码

try {
 $spname = 'P__Test_GetData';
 $query = mysql_query ( "call $spname()", $conn ) or die ( "[$spname]Query failed:".mysql_error() );
 while ( $row = mysql_fetch_array ( $query ) ) {
  echo $row ['ProvinceID'].'::'.$row ['ProvinceName']; //输出数据集
 }

} catch ( Exception $e ) {
 echo $e;
}

类型四:调用带返回多个结果集的方法(目前只能通过mysqli来实现~~)

 代码如下 复制代码

//PHP
$rows = array (); 
$db = new mysqli($server,$user,$psd,$dbname); 
if (mysqli_connect_errno()){ 
    $this->message('Can not connect to MySQL server'); 

$db->query("SET NAMES UTF8"); 
$db->query("SET @Message");
if($db->real_query("call P__Test_GetData2(@Message)")){ 
    do{ 
        if($result = $db->store_result()){ 
            while ($row = $result->fetch_assoc()){ 
                array_push($rows, $row); 
            } 
            $result->close(); 
        } 
    }while($db->next_result()); 

$db->close();
print_r($rows);
//Procedure
……
select * from T1 where ……
select * from T2 where ……
……

实例四:传出参数的inout存储过程

 代码如下 复制代码
$sql = "
create procedure myproce4(inout sexflag int)
begin
SELECT * FROM user WHERE sex = sexflag;
end;
";
mysql_query($sql);//创建一个myproce4的存储过程
$sql = "set @sexflag = 1";
mysql_query($sql);//设置性别参数为1
$sql = "call test.myproce4(@sexflag);";
mysql_query($sql);//调用myproce4的存储过程,在cmd下面看效果


实例五:使用变量的存储过程

 代码如下 复制代码
$sql = "
create procedure myproce5(in a int,in b int)
begin
declare s int default 0;
set s=a+b;
select s;
end;
";
mysql_query($sql);//创建一个myproce5的存储过程
$sql = "call test.myproce5(4,6);";
mysql_query($sql);//

调用myproce5的存储过程,在cmd下面看效果

实例六:case语法

 代码如下 复制代码
$sql = "
create procedure myproce6(in score int)
begin
case score
when 60 then select '及格';
when 80 then select '及良好';
when 100 then select '优秀';
else select '未知分数';
end case;
end;
";
mysql_query($sql);//创建一个myproce6的存储过程
$sql = "call test.myproce6(100);";
mysql_query($sql);//

调用myproce6的存储过程,在cmd下面看效果

实例七:循环语句

 代码如下 复制代码
$sql = "
create procedure myproce7()
begin
declare i int default 0;
declare j int default 0;
while i<10 do
set j=j+i;
set i=i+1;
end while;
select j;
end;
";
mysql_query($sql);//创建一个myproce7的存储过程
$sql = "call test.myproce7();";
mysql_query($sql);//

调用myproce7的存储过程,在cmd下面看效果


实例八:repeat语句

 代码如下 复制代码
$sql = "
create procedure myproce8()
begin
declare i int default 0;
declare j int default 0;
repeat
set j=j+i;
set i=i+1;
until j>=10
end repeat;
select j;
end;
";
mysql_query($sql);//创建一个myproce8的存储过程
$sql = "call test.myproce8();";
mysql_query($sql);//

调用myproce8的存储过程,在cmd下面看效果

实例九:loop语句

 代码如下 复制代码

$sql = "
create procedure myproce9()
begin
declare i int default 0;
declare s int default 0;

loop_label:loop
set s=s+i;
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop;
select s;
end;
";
mysql_query($sql);//创建一个myproce9的存储过程
$sql = "call test.myproce9();";
mysql_query($sql);//

调用myproce9的存储过程,在cmd下面看效果

实例十:删除存储过程

 代码如下 复制代码

mysql_query("drop procedure if exists myproce");//删除test的存储过程

实例十:存储过程中的游标

小生今天没事收集了两款php数据库备份程序,这里可以完成功能有:1.备份指定数据表、2.打包成zip文件、3.发送到指定邮箱地址,基本功能就这些了

下面看下使用方法:

 代码如下 复制代码

<?php
error_reporting(0);//消灭万恶的php报警提示
//设定邮箱
$options = array('email' => array('email1', 'email2'),
'folder' => './backup/',
'mysql' => array('localhost', 'user', 'password', 'db'));
 
$b = new Backup($options);
 
  // 提交备份命令
  if(isset($_POST['backup']))
  {
   // 开始备份
   $b->backupDB();
  }
  // 显示备份表
  $b->outputForm();
?>

具体类实现:

 代码如下 复制代码

<?php
 
class Backup
{
/**
* @var 用于保存配置参数
*/
var $config;
 
/**
* @var 用于保存mysql dump的数据
*/
var $dump;
 
/**
* @var 用于数据库结果数据以及insert指令
*/
var $struktur = array();
 
/**
* @var 压缩文件名zip
*/
var $datei;
 
/**
* 结构函数
* 连接数据库
* @return
*/
public function Backup($options)
{
// 从形参中读取配置
foreach($options AS $name => $value)
{
$this->config[$name] = $value;
}
 
// 连接数据库
mysql_connect($this->config['mysql'][0], $this->config['mysql'][1],
$this->config['mysql'][2]) or die(mysql_error());
mysql_select_db($this->config['mysql'][3]) or die(mysql_error());
}
 
/**
* 执行备份数据库流程的函数
* @return
*/
public function backupDB()
{
// 开始备份的命令
if(isset($_POST['backup']))
{
// 检测是否选择了数据表
if(empty($_POST['table']))
{
die("请选择一个数据表。");
}
 
/** 开始备份 **/
$tables = array();
$insert = array();
$sql_statement = '';
 
// 锁定需要备份的数据库,防止读脏数据
foreach($_POST['table'] AS $table)
{
mysql_query("LOCK TABLE $table WRITE");
 
// 获取数据库结构
$res = mysql_query('SHOW CREATE TABLE '.$table.'');
$createtable = mysql_result($res, 0, 1);
$str = "nn".$createtable."nn";
 
array_push($tables, $str);
 
// 查询数据表中的所有数据行
$sql = 'SELECT * FROM '.$table;
$query = mysql_query($sql) or die(mysql_error());
$feld_anzahl = mysql_num_fields($query);
 
$sql_statement = '--
-- Data Table `$table`
--
';
 
// 开始读数据,并将其转换为insert命令
while($ds = mysql_fetch_object($query)){
$sql_statement .= 'INSERT INTO `'.$table.'` (';
 
for ($i = 0;$i <$feld_anzahl;$i++){
if ($i ==$feld_anzahl-1){
$sql_statement .= mysql_field_name($query,$i);
} else {
$sql_statement .= mysql_field_name($query,$i).', ';
}
}
 
$sql_statement .= ') VALUES (';
 
for ($i = 0;$i <$feld_anzahl;$i++){
$name = mysql_field_name($query,$i);
if (empty($ds->$name)){
$ds->$name = 'NULL';
}
if ($i ==$feld_anzahl-1){
$sql_statement .= '"'.$ds->$name.'"';
} else {
$sql_statement .= '"'.$ds->$name.'", ';
}
}
$sql_statement .= ");n";
}
 
// 将insert数据放在数组中,去重
if(!in_array($sql_statement, $insert))
{
array_push($insert, $sql_statement);
unset($sql_statement);
}
 
unset($sql_statement);
 
}
 
// 将数据库结构与insert命令放在一起啦
$this->struktur = array_combine($tables, $insert);
 
// 执行dump函数
$this->createDUMP($this->struktur);
 
// 生成zip压缩包
$this->createZIP();
 
/** 备份结束 **/
 
// 发一封邮件到指定邮箱,附件包含sql备份,如果你设置了的话^_^
if(isset($this->config['email']) && !empty($this->config['email']))
{
$this->sendEmail();
}
 
// output
echo '<h3 style="color:green;">备份完成啦</h3><a href="'.
$this->datei.'">下载备份</a>
<br />
<br />';
}
}
 
/**
* 发送邮件函数
* @return
*/
protected function sendEmail()
{
// 读取邮箱地址
foreach($this->config['email'] AS $email)
{
$to = $email;
 
$from = $this->config['email'][0];
 
$message_body = "本邮件中包含的zip压缩包为数据库备份";
 
$msep = strtoupper (md5 (uniqid (time ())));
 
// 设置email头
$header =
"From: $fromrn" .
"MIME-Version: 1.0rn" .
"Content-Type: multipart/mixed; boundary=".$msep."rnrn" .
"--$mseprn" .
"Content-Type: text/plainrn" .
"Content-Transfer-Encoding: 8bitrnrn" .
$message_body . "rn";
 
// 文件名
$dateiname = $this->datei;
 
// 压缩包大小
$dateigroesse = filesize ($dateiname);
 
// 读取压缩包
$f = fopen ($dateiname, "r");
// 保存到附件
$attached_file = fread ($f, $dateigroesse);
// 关闭压缩包
fclose ($f);
// 建立一个附件
$attachment = chunk_split (base64_encode ($attached_file));
 
// 设置附件头
$header .=
"--" . $msep . "rn" .
"Content-Type: application/zip; name='Backup'rn" .
"Content-Transfer-Encoding: base64rn" .
"Content-Disposition: attachment; filename='Backup.zip'rn" .
"Content-Description: Mysql Datenbank Backup im Anhangrnrn" .
$attachment . "rn";
 
// 标记附件结束未知
$header .= "--$msep--";
 
// 邮件标题
$subject = "数据库备份";
 
// 发送邮件需要开启php相应支持哦^^
if(mail($to, $subject, '', $header) == FALSE)
{
die("无法发送邮件,请检查邮箱地址");
}
 
echo "<p><small>邮件发送成功</small></p>";
}
}
 
/**
* 建立数据库备份的压缩包并保存到服务器指定目录中
* @return
*/
protected function createZIP()
{
 
// 文件夹权限要够
chmod($this->config['folder'], 0777);
 
// 建立压缩包
$zip = new ZipArchive();
// 设置压缩包文件名
$this->datei = $this->config['folder'].$this->config['mysql'][3]."_"
.date("j_F_Y_g_i_a").".zip";
 
// 看看压缩包能不能打开
if ($zip->open($this->datei, ZIPARCHIVE::CREATE)!==TRUE) {
exit("无法打开 <".$this->datei.">n");
}
 
// 把dump出来的数据放到压缩包里
$zip->addFromString("dump.sql", $this->dump);
// 关闭压缩包
$zip->close();
 
// 看看压缩包有没有生成
if(!file_exists($this->datei))
{
die("无法生成压缩包");
}
 
echo "<p><small>数据库备份压缩包成功生成</small></p>";
}
 
/**
* mysql dump函数
* @param object $dump
* @return
*/
protected function createDUMP($dump)
{
$date = date("F j, Y, g:i a");
 
$header = <<<HEADER
        -- SQL Dump
--
-- Host: {$_SERVER['HTTP_HOST']}
-- Erstellungszeit: {$date}
 
--
-- Datenbank: `{$this->config['mysql'][3]}`
--
 
-- --------------------------------------------------------
 
HEADER;
foreach($dump AS $name => $value)
{
$sql .= $name.$value;
}
$this->dump = $header.$sql;
}
 
/**
* 生成选择数据表的界面函数
* @return
*/
public function outputForm()
{
// 选择全部
$result = mysql_list_tables($this->config['mysql'][3]);
 
$buffer = '
<fieldset>
<legend>选择需要备份的数据表</legend>
<form method="post" action="">
<select name="table[]" multiple="multiple" size="30">';
while($row = mysql_fetch_row($result))
{
$buffer .= '<option value="'.$row[0].'">'.$row[0].'</option>';
}
$buffer .= '</select>
<br /><br />
<input type="submit" name="backup" value="备份选定数据表" />
</form>
</fieldset>';
 
echo $buffer;
}
}
 
?>

通用数据库备份类

 代码如下 复制代码

<?php
/*数据库备份:NOTICE:此类要添加数据库连接才能正常工作*/
Class Back_up_databaseextendsdbstuff{
//类开始
var $HOST;
var $USERNAME;
var $PASSWORD;
var $DATABASE;
function Back_up_database($host,$username,$password,$database){
//初始化数据库连接
$this->HOST=$host;
$this->USERNAME=$username;
$this->ASSWORD=$password;
$this->DATABASE=$database;
$Connection=$this->connect($this->HOST,$this->USERNAME,$this->ASSWORD,$this->DATABASE,$pconnect);
$this->Connection=$Connection;
}
//取得数据库中的表
function get_table_name($database){
$this->Connection;
$result=mysql_list_tables($database);
$i=0;
while($i<mysql_num_rows($result)){
$tb_name[$i]=mysql_tablename($result,$i);
$table_name.=$tb_name[$i].",";
$i++;
}
$this->table_name=substr($table_name,0,-1);
return$this->table_name;
}
//取得每个表中的FIELDS和属性并生成CREATETABLE语句
function get_table_fields($table_name){
$this->Connection;
$createtable=dbstuff::query("SHOWCREATETABLE$table_name");
$create=dbstuff::fetch_row($createtable);
$tabledump.="DROPTABLEIFEXISTS$table_name;\n";
$tabledump.=$create[1].";\n\n";
$this->$table_name=$tabledump;
return$this->$table_name;
}
//取得表中的数据并生成ISERTINTO语句
function get_insert($table_insert_name){
$this->Connection;
$rows=dbstuff::query("SELECT*FROM$table_insert_name");
$numfields=dbstuff::num_fields($rows);
$numrows=dbstuff::num_rows($rows);
while($row=dbstuff::fetch_row($rows)){
$comma="";
$tabledump.="INSERTINTO$table_insert_nameVALUES(";
for($i=0;$i<$numfields;$i++){
$tabledump.=$comma."'".mysql_escape_string($row[$i])."'";
$comma=",";
}
$tabledump.=");\n";
}
$this->tabledump=$tabledump;
return$this->tabledump;
}
//获取所有数据并连接成新的字符串并将它写入文件中.sql
function get_string($database_name,$file_path_name){
$time=date("Y-m-dH:j");
$date_time=date("YmdHis");
$file_path_name=$file_path_name.$date_time.".sql";
$version="Antsent_Web_StudioDatabaseBackUpV1.01";
$idstring='#Identify:'.base64_encode("$time,$version")."\n";
$head_info="$idstring".
"#\n".
"#Antsnet_Web!TheBasicClassOfBackUpDataBase\n".
"#Version:AntsnetWeb!$version\n".
"#Timetime\n".
"#Type:ClassOfBackUpDataBase\n".
"#Antsnet_Web_Studio!Home:http://www.111cn.net \n".
"#PleasevisitourwebsitefornewestinfomationaboutAntsnet_Web_Studio!\n".
"#--------------------------------------------------------\n\n\n";
$table_name=$this->get_table_name($database_name);
$array_table=explode(",",$table_name);
for($i=0;$i<count($array_table);$i++){
$table_string.=$this->get_table_fields($array_table[$i]);
$table_insert.=$this->get_insert($array_table[$i]);
}
$count_string=$head_info.$table_string.$table_insert;
//return$count_string;
$write_status=$this->write_file($file_path_name,$count_string);
return$write_status;
}
//写入一个文件
function write_file($file_path,$file_contents){
if(@!$fp=fopen($file_path,'w')){
$status="<fontcolor=\"red\">ThisFileCouldNotOpenOrRead.</font>";
}else{
flock($fp,3);
fwrite($fp,$file_contents);
fclose($fp);
window.google_render_ad();
?>

[!--infotagslink--]

相关文章

  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • FlashFXP连接站点中文显示乱码解决办法

    FlashFXP是一款常用的服务器客户连接软件了,我们可以通过FlashFXP来上传或下载文件,但有一些朋友使用FlashFXP时碰到中文目录或文件名乱码问题,那么要如何来解决呢?具体就...2016-10-10
  • php中把unicode编码转化为中文

    小编在网上看到最多的就是汉字转换unicode编码了,今天我们看到一个反过来的操作就是把unicode转换成中文了,下面一起来看看 这两天帮别人开发微信平台好友板块,存...2016-11-25
  • php 判断是否是中文/英文/数字示例代码

    复制代码 代码如下: $str='asb天水市12'; if (preg_match("/^[/x7f-/xff]+$/", $str)){ echo '全部是汉字'; }else { echo '不全是汉字'; } /** PHP自带的判断是否是中文, eregi('[^/x00-/x7F]', $str ) //中文 ereg...2013-10-04
  • JavaScript过滤字符串中的中文与空格方法汇总

    这篇文章主要介绍了JavaScript过滤字符串中的中文与空格方法汇总 的相关资料,需要的朋友可以参考下...2016-03-09
  • C#知识整理

    本文主要介绍了C#的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • three.js显示中文字体与tween应用详析

    这篇文章主要给大家介绍了关于three.js显示中文字体与tween应用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-04
  • php中文转换成拼音代码

    <?php教程 function cn2pinyin($_string, $_code='gb2312') { $_datakey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|b...2016-11-25
  • MySQL的日志基础知识及基本操作学习教程

    MySQL日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句...2015-11-24
  • php 根据啊拉伯数字转变成大写中文数字

    // 原是是根据用户输入的数字判断再转换成想要的大写数字,如果我们先把大小写存在一个数组,再判断进行转换就OK了。 $data = $_POST['rmb']; if (!ereg("^[0-9.]",$dat...2016-11-25
  • PHP把16进制的编码转为中文程序代码

    今天在做公司的项目的时候,遇到一个问题,群聊天记录存入数据库的时候把聊天记录及央视使用16进制转换,我在做将聊天记录导出为text文本的时候,需要将聊天记录先从16进制转...2016-11-25
  • 如何正确统计中文字数?

    PHP代码:-------------------------------------------------------------------------------- function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLe...2016-11-25