php调用sql数据库代码怎么写,PHP读取SQL文件并导入数据库(示例)

/**

* 读取 sql 文件并写入数据库

* @version 1.01 demo.php

* @author xingshaocheng

* @edit: www.jbxue.com

*/

class DBManager

{

var $dbHost = '';

var $dbUser = '';

var $dbPassword = '';

var $dbSchema = '';

function __construct($host,$user,$password,$schema)

{

$this->dbHost = $host;

$this->dbUser = $user;

$this->dbPassword = $password;

$this->dbSchema = $schema;

}

function createFromFile($sqlPath,$delimiter = '(;\n)|((;\r\n))|(;\r)',$prefix = '',$commenter = array('#','--'))

{

//判断文件是否存在

if(!file_exists($sqlPath))

return false;

$handle = fopen($sqlPath,'rb');

$sqlStr = fread($handle,filesize($sqlPath));

//通过sql语法的语句分割符进行分割

$segment = explode(";",trim($sqlStr));

//var_dump($segment);

//去掉注释和多余的空行

foreach($segment as & $statement)

{

$sentence = explode("\n",$statement);

$newStatement = array();

foreach($sentence as $subSentence)

{

if('' != trim($subSentence))

{

//判断是会否是注释

$isComment = false;

foreach($commenter as $comer)

{

if(eregi("^(".$comer.")",trim($subSentence)))

{

$isComment = true;

break;

}

}

//如果不是注释,则认为是sql语句

if(!$isComment)

$newStatement[] = $subSentence;

}

}

$statement = $newStatement;

}

//对表名加前缀

if('' != $prefix)

{

//只有表名在第一行出现时才有效 例如 CREATE TABLE talbeName

$regxTable = "^[\`\'\"]{0,1}[\_a-zA-Z]+[\_a-zA-Z0-9]*[\`\'\"]{0,1}$";//处理表名的正则表达式

$regxLeftWall = "^[\`\'\"]{1}";

$sqlFlagTree = array(

"CREATE" => array(

"TABLE" => array(

"$regxTable" => 0

)

),

"INSERT" => array(

"INTO" => array(

"$regxTable" => 0

)

)

);

foreach($segment as & $statement)

{

$tokens = split(" ",$statement[0]);

$tableName = array();

$this->findTableName($sqlFlagTree,$tokens,0,$tableName);

if(empty($tableName['leftWall']))

{

$newTableName = $prefix.$tableName['name'];

}

else{

$newTableName = $tableName['leftWall'].$prefix.substr($tableName['name'],1);

}

$statement[0] = str_replace($tableName['name'],$newTableName,$statement[0]);

}

}

//组合sql语句

foreach($segment as & $statement)

{

$newStmt = '';

foreach($statement as $sentence)

{

$newStmt = $newStmt.trim($sentence)."\n";

}

$statement = $newStmt;

}

//用于测试------------------------

//var_dump($segment);

//writeArrayToFile('data.txt',$segment);

//-------------------------------

self::saveByQuery($segment);

return true;

}

private function saveByQuery($sqlArray)

{

$conn = mysql_connect($this->dbHost,$this->dbUser,$this->dbPassword);

mysql_select_db($this->dbSchema);

foreach($sqlArray as $sql)

{

mysql_query($sql);

}

mysql_close($conn);

}

private function findTableName($sqlFlagTree,$tokens,$tokensKey=0,& $tableName = array())

{

$regxLeftWall = "^[\`\'\"]{1}";

if(count($tokens)<=$tokensKey)

return false;

if('' == trim($tokens[$tokensKey]))

{

return self::findTableName($sqlFlagTree,$tokens,$tokensKey+1,$tableName);

}

else

{

foreach($sqlFlagTree as $flag => $v)

{

if(eregi($flag,$tokens[$tokensKey]))

{

if(0==$v)

{

$tableName['name'] = $tokens[$tokensKey];

if(eregi($regxLeftWall,$tableName['name']))

{

$tableName['leftWall'] = $tableName['name']{0};

}

return true;

}

else{

return self::findTableName($v,$tokens,$tokensKey+1,& $tableName);

}

}

}

}

return false;

}

}

function writeArrayToFile($fileName,$dataArray,$delimiter="\r\n")

{

$handle=fopen($fileName, "wb");

$text = '';

foreach($dataArray as $data)

{

$text = $text.$data.$delimiter;

}

fwrite($handle,$text);

}

//测试

$dbM = new DBManager('localhost','w01f','123456','test');

$dbM->createFromFile('data.sql',null,'fff_');

?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何修改SharePoint服务器场管理员帐户和密码

最近需要修改MOSS服务器场的管理员帐户&#xff0c;用 "%commonprogramfiles%\Microsoft Shared\Web server extensions\12\BIN\Stsadm.exe" -o updatefarmcredentials -userlogin [username] -password [password] 这条命令去修改发现没有修改成功&#xff0c;这个…

php中sisson用法,thinkPHP中session()方法用法详解

本文实例讲述了thinkPHP中session()方法用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;系统提供了Session管理和操作的完善支持&#xff0c;全部操作可以通过一个内置的session函数完成。用法session(name,name,value)参数name(必须)&#xff1a;如果传入数组 则…

【转】SharePoint 2010 Search Service -- 管理中心配置

今天配置了一下SharePoint Search&#xff0c;怕忘&#xff0c;赶紧记下来。 我参考了国外的一篇文章&#xff1a;Search Configuration in SharePoint 2010 首先&#xff0c;要查看以下User Profile Service, User Profile Synchronization Service是否运行正常&#xff0c;然…

PHP获取表单数据的方法有几种,如何实现PHP获取表单数据与HTML嵌入PHP脚本

如何实现PHP获取表单数据与HTML嵌入PHP脚本导语&#xff1a;如何实现PHP获取表单数据与HTML嵌入PHP脚本&#xff0c;下面是小编给大家提供的操作讲解&#xff0c;大家可以参考阅读&#xff0c;更多详情请关注应届毕业生考试网。常用的自动全局变量如下所示&#xff1a;1、GET方…

【转】SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

前段时间工作很忙&#xff0c;好久没更新博客了&#xff0c;趁国庆休假期间&#xff0c;整理了两个之前积累很实用的企业集成组件&#xff0c;并在真正的大型项目中经受住了考验&#xff1a;.Net版SAP RFC适配器组件和SharePoint 2013修改AD域用户密码的WebPart。目前无法在网上…

php base64尺寸,PHP base64编码的图像显示不正确

我试图使用base64编码将图像(任何大小)发送到我创建的API。编码后的字符串会作为URL中的参数访问我的API。使用PHP构建的API。PHP base64编码的图像显示不正确一旦请求命中我的API&#xff0c;我想将图像存储到我的服务器上&#xff0c;并将文件名保存在数据库中。这是工作&…

软件测试之-测试用例写作规范

通用测试用例写作规范 软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一…

php后静态绑定,详解PHP后期静态绑定分析与应用

基础知识1. 范围解析操作符 (::)可以用于访问静态成员&#xff0c;类常量&#xff0c;还可以用于覆盖类中的属性和方法。self&#xff0c;parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。parent用于调用父类中被覆盖的属性或方法(出现在哪…

Windows电脑SMB共享设置方法

SMB简介&#xff1a; SMB&#xff08;Server Message Block&#xff09;(*nix平台和Win NT4.0又称CIFS)协议是Windows平台标准文件共享协议&#xff0c;Linux平台通过samba来支持。SMB最新版本v3.0&#xff0c;在v2.0基础上针对WAN和分布式有改进。 建议使用原版wind…

php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货

PHP个人发卡网源码&#xff0c;支持MA支付对接&#xff0c;扫码自动发货。源码介绍个人发卡网源码&#xff0c;支持码支付对接&#xff0c;扫码自动发货.自适应网页&#xff0c;可为商品设置优惠套餐&#xff0c;后台管理功能丰富。前台发卡页面有点粗糙&#xff0c;已开源的可…

NtLmSsp

NTLMSSP (NT LAN Manager Security Support Provider)&#xff0c;是微软提供的安全支持接口协议&#xff0c;常用于SMB共享。估计你是从linux的fstab配置文件看来的选项吧。这个是参数指定了linux挂载smb网络共享时使用的加密方法。 NtLmSsp&#xff08;NT LM安全性支持提供者…

php让代码重新运行一次,脚本运行时是否可以动态重新加载PHP代码?

我有一个使用PHPSockets的多人游戏服务器,因此完全用PHP编写.目前,每当我对PHP服务器脚本进行任何更改时,我都必须终止该脚本,然后重新开始.这意味着任何在线用户都会断开连接(通常不会出现问题,因为目前没有这么多用户).现在我正在重写服务器脚本以使用自定义PHP类并对其进行一…

php网页表格样式,HTML5制作表格样式

废话不多说了&#xff0c;具体代码如下所示&#xff1a;表格*{margin: 0;padding: 0;}body{font: italic 20px Georgia, serif;letter-spacing: normal;background-color: #f0f0f0;}#content{width: 750px;padding: 40px;margin: 0 auto;background-color: #fff;border-left: 3…

SharePoint 开发TimerJob 介绍

项目需要写TimerJob&#xff0c;以前也大概知道原理&#xff0c;不过&#xff0c;开发过程中&#xff0c;还是遇到一些问题&#xff0c;网上看了好多博客&#xff0c;也有写的灰常好的&#xff0c;不过&#xff0c;自己还是想再写一下&#xff0c;也算是给自己一个总结&#xf…

【转】如何写出让同事无法维护的代码

译者&#xff1a;陈皓 &#xff08;左耳朵耗子&#xff09; 译文&#xff1a;http://coolshell.cn/articles/4758.html 对&#xff0c;你没看错&#xff0c;本文就是教你怎么写出让同事无法维护的代码。 一、程序命名 容易输入的变量名。比如&#xff1a;Fred&#xff0c;as…

linux php环境搭建 图文教程,linux php环境搭建教程

1) 安装依赖包yum -y install wget vim pcre pcre-devel openssl openssl-devel \libicu-devel gcc gcc-c autoconf libjpeg libjpeg-devel libpng \libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib \zlib-devel glibc glibc-devel glib2 glib2-devel ncurse…

【转】The password supplied with the username Domain\UserName was not correct. AD密码定期更换

起因 今天想进入SharePoint 2013 Central Administration创建一个WebApplication&#xff0c;尽然发生了错误&#xff1a; The password supplied with the username Domain\UserName was not correct. Verify that it was entered correctly and try again 具体如下图&#x…

XHR简介

在XHR诞生前&#xff0c;网页要获取客户端和服务器的任何状态更新&#xff0c;都需要刷新一次&#xff0c;在XHR诞生后就可以完全通过JS代码异步实现这一过程。XHR的诞生也使最初的网页制作转换为开发交互应用&#xff0c;拉开了WEB2.0的序幕。 XHR是一种浏览器API&#xff0…

织梦php echo 调用金币,dedecms实现任意页面调用当前会员信息的方法

文实例讲述了dedecms实现任意页面调用当前会员信息的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;1、在你需要调用的页面里面之间加入代码如下:function CheckInfo(){var taget_obj document.getElementByIdx_x(_userinfo);myajax new DedeAjax(taget_obj,fals…

第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现

一. 前奏-Timer类实现定时任务 在没有引入第三方开源的定时调度框架之前&#xff0c;我们处理一些简单的定时任务同时都是使用Timer类&#xff0c; DotNet中的Timer类有三个&#xff0c;分别位于不同的命名空间下&#xff0c;分别是&#xff1a; ①.位于System.Windows.Forms里…