求一高效分析SQL语句的算法 我用的preg_split分割开发现用--注释的东西不用去掉,mysql_query会自动忽略 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 现在不是备份,是还原,所以我想将SQL语句分析成数组,再插入。 preg_split怎么分的,有代码吗? 不可以执行 mysql -u root -p << aa.sql 吗? 还原为什么要将备份的SQL文件解析成SQL语句数组呢?关注。 我做的是WEB界面,如果服务器不是自己的肯定不能用命令行了。也不是CVS,就是SQL语句的文件。想保存成数组 比如有一个 db.sql文件,我有一个上传数据库文件的表单,用户上传后,程序在后台分析该SQL文件,并将结构和数据插入到数据库当中,就是这样,PHPMYADMIN中就有这个功能。但是WEB界面就不能用mysql db < db.sql -u root -ppassword这样的命令行。一般虚拟主机也不会提供给你命令行功能吧,所以想通过WEB界面解决这个问题。 读取sql文件,按“;[\r\n]+”分割成数组 我两天前也面临同样的问题,找到这样一个程序,我还没有测试,请到家帮忙看看。导入的程序如下:< ?if($table==\"\")exit();mysql_connect(\"localhost\",\"name\",\"password\");mysql_select_db(\"database\");$message = file(\"$table.txt\");echo $numfields = chop($message[0]);for($k=1;$k< count($message);$k+=($numfields+1)){$value=\"\";for ($i=$k;$i< ($k+$numfields-1);$i++){$tmp = str_replace(\"&&php2000mysqlreturn&&\",\"\r\n\",chop($message[$i]));$value .= \"\'\".addslashes($tmp).\"\',\";}$tmp = str_replace(\"&&php2000mysqlreturn&&\",\"\r\n\",chop($message[$k+$numfields-1]));$value .= \"\'\".$tmp.\"\'\";$query = \"insert into $table values (\".$value.\")\";echo mysql_error();mysql_query($query);echo $k.\" \";}echo \"ok\";?>使用方法和可能的问题!1 导入时 file()函数可能会有问题(我的10M的数据没出现问题),可以改为 fopen()然后没次读一行!!2 导入,导出都需要用 ftp 操作,也就是导出后,用 ftp 把数据转到本机,导入时先用ftp转移数据到服务器! 读取sql文件,按“;[\r\n]+”分割成数组----------------------这样如果是字符串中包含了";[\r\n]"不是要被从中间断开? 如果你的sql文件是由数据库辅助程序产生的就不会,因为已经做了转义否则是有可能的。其实判断是否被错误截断了也是很简单的:遍历结果数组,统计“'”出现的次数是否为奇数,是则误截断了。补上并将下一元素连接上来或者这样判断,通常在sql文件中出现的sql指令大多都是create、insert。他们都以“)”结束,所以判断数组元素的最后一个字符是否为“)”也是可行的 怎么通过apache日志统计pv uv请高手帮帮忙 请教一下,这样的效果是如何实现的? 在命令行下我用PHP执行脚本不报错,但是我在网页上输出就报错 偷偷扫描别人的网页需要定时跳转,不知道是从什么时候开始计时的? 谁能解释一下PHP环境下的这些工具的作用? 如何从它人的网页取得我想要的数据?(重酬100分) 请教,php中如何按换行符倒序排列 请问通过系统进程post过来的二进制图片数据用PHP怎么接收?? 大家一般怎么得到小数点后两位数?[讨论] 求救各位大虾,一个ACCESS转MYSQL的问题(100分不够再加) 在线急等,关于怎么保存网页的数据到数据库里呀 php 图片操作 急!!!
关注。
也不是CVS,就是SQL语句的文件。想保存成数组
我有一个上传数据库文件的表单,
用户上传后,程序在后台分析该SQL文件,并将结构和数据插入到数据库当中,
就是这样,PHPMYADMIN中就有这个功能。
但是WEB界面就不能用mysql db < db.sql -u root -ppassword这样的命令行。
一般虚拟主机也不会提供给你命令行功能吧,所以想通过WEB界面解决这个问题。
if($table==\"\")exit();
mysql_connect(\"localhost\",\"name\",\"password\");
mysql_select_db(\"database\");
$message = file(\"$table.txt\");
echo $numfields = chop($message[0]);
for($k=1;$k< count($message);$k+=($numfields+1))
{
$value=\"\";
for ($i=$k;$i< ($k+$numfields-1);$i++)
{
$tmp = str_replace(\"&&php2000mysqlreturn&&\",\"\r\n\",chop($message[$i]));
$value .= \"\'\".addslashes($tmp).\"\',\";
}
$tmp = str_replace(\"&&php2000mysqlreturn&&\",\"\r\n\",chop($message[$k+$numfields-1]));
$value .= \"\'\".$tmp.\"\'\";
$query = \"insert into $table values (\".$value.\")\";
echo mysql_error();
mysql_query($query);
echo $k.\" \";
}
echo \"ok\";
?>使用方法和可能的问题!
1 导入时 file()函数可能会有问题(我的10M的数据没出现问题),可以改为 fopen()然后没次读一行!!
2 导入,导出都需要用 ftp 操作,也就是导出后,用 ftp 把数据转到本机,导入时先用ftp转移数据到服务器!
这样如果是字符串中包含了";[\r\n]"不是要被从中间断开?
否则是有可能的。
其实判断是否被错误截断了也是很简单的:
遍历结果数组,统计“'”出现的次数是否为奇数,是则误截断了。补上并将下一元素连接上来
或者这样判断,通常在sql文件中出现的sql指令大多都是create、insert。他们都以“)”结束,所以判断数组元素的最后一个字符是否为“)”也是可行的