像这种php读取sql文件导入数据库情况,用得最多的就是数据库备份与还原来了,原理很简单按指定格式导入成.sql文件或利用phpmyadmin导出都可以用本程序来实现导入,代码如下:
<?php function into_sql($file) { global $mysql_host, $mysql_user, $mysql_password, $mysql_db, $mysql_table_prefix, $dbcharset; //获取数据库配置信息 mysql_connect($mysql_host, $mysql_user, $mysql_password); mysql_select_db($mysql_db); if (mysql_get_server_info() < '4.1') //返回 link_identifier 所使用的服务器版本。如果省略 link_identifier,则使用上一个打开的连接。 { $dbcharset = ''; //设置字符集,如果mysql版本低于4.1,则不设置字符集信息 } if (emptyempty($dbcharset)) { $dbcharset = 'gbk'; } $dbcharset && mysql_query("set names '$dbcharset'"); // 设置字符集 if (mysql_get_server_info() > '5.0') { mysql_query("set sql_mode=''"); } $file2 = file_get_contents($file); $file2 = iconv("utf-8", "gbk", $file2); $file2 = str_replace("seo教程_", $mysql_table_prefix, $file2); //将文件中数据库表前缀换成用户设定的前缀 $file2 = explode("n", $file2); //将文件内容按行读入到数组 $c1 = count($file2); for ($j = 0; $j < $c1; $j++) { $ck = substr($file2[$j], 0, 4); //取每行的前4个字符 if (ereg("#", $ck) || ereg("--", $ck)) //去掉注释 { continue; } $arr[] = $file2[$j]; //将去掉注释的文件内容按行读入数组$arr,数组每个元素对应一行 } $read = implode("n", $arr); //重新组织文件内容到一个字符串,(按照原来分好的一行一行的) $sql = str_replace("r", '', $read); //去掉"r(回车符)" $detail = explode(";n", $sql); //将经上述整理过的文件内容再次按一条完整的sql语句(以;和n分隔)导入到数组$detail, //此时数组detail的每个元素对应一条完整的sql语句 $count = count($detail); for ($i = 0; $i < $count; $i++) { $sql = str_replace("r", '', $detail[$i]); //去掉每行sql中的回车符 $sql = str_replace("n", '', $sql); //去掉换行符 $sql = trim($sql); //去掉前后空格 //现在的$sql if ($sql) { if (eregi("create table", $sql)) //如果当前的sql语句是创建新表,则考虑版本兼容,以及重设字符集 { //$mysqlv=mysql_get_server_info(); $sql = preg_replace("/default charset=([a-z0-9]+)/is", "", $sql); //去除原来的字符集设置信息 $sql = preg_replace("/type=myisam/is", "engine=myisam", $sql); if ($dbcharset) { $sql = str_replace("engine=myisam", " engine=myisam default charset=$dbcharset ", $sql); } if (mysql_get_server_info() < '4.1') { //开源代码phprm.com $sql = preg_replace("/engine=myisam/is", "type=myisam", $sql); // } } mysql_query($sql); } } }
永久地址:
转载随意~请带上教程地址吧^^