图片 58

PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库

在重重时候,大家都要对有个别Web
页面实行安全尊崇。标准的事例便是前台浏览页面与后台管理页面的安全性。这也是
WEB 上用得最多的一种页面安全形式。在用PHP4
开拓一个迷你的书籍管理连串中,作者也碰到了那么些安全难题。于是笔者想到了PHP4
的新天性—-Session ..

一个回顾的PHP网址构造

渴求指标:同一站点,无权客户,平日授权顾客和精品客户能看见和利用分歧的页面。

课前小知识布满:MSSQL和SQL
Server是同一个软件,叫法分化而已,MSSQL全称是Microsoft SQL
Server,MSSQL是简写,有些人则向往一直叫SQL
Server,作者就比较赏识这种叫法,有风味、、、

鉴于事前学习过asp.net
mvc的网站开拓,由此,在新接触一门新的言语时,也会自然或不自然地仿照效法这种资历,然后做出网址。假设您也是刚开端接触php,并从最原始的办法早先写网址,那么,你能够参见上面一种做法,它也是通过参谋和研究而形成的一种大概的PHP网址构造

完结方式:在要体贴的页面 include 区别品级的安全核算摸板。

 

一种PHP网址布局

注意事项:

近期有客户在应用PHPWAMP的时候,向小编咨询一个主题材料,正是关于PHP怎样连接MSSQL数据库。

图片 1

1 要制止顾客浏览器不行使 cookie 而不可能浏览受保险的页面

 

里面,网址名即为品种文件夹,文件夹下分有css、js、images、includes、templates、up等等文件夹,其成效如下:

什么样行使:

日常我们搭建网址日常是PHP+Mysql数据库,

目录及效果列表

1 在供给相符爱慕的页面包车型大巴代码最终边加上 include (secturity2.php卡塔尔国; 就能够了

可是在档期的顺序中,我们一时一定要用到PHP+MSSQL数据库,那应该怎么做吧?

目录
功能
css
专门用来存放css文件,一般每个模块独立成一个css文件,如用户(user.css),产品(product.css)等
images
用来存放网站所需的图片,如网站logo,背景图处,增删查改的图标等
includes
存放业务逻辑的代码,每个模块独立成一个文件,如用户(users.php),产品(products.php)等,每个文件是各种业务逻辑的处理方法的集合,如增、删等
js
集中存放js代码,如提交前验证,改善用户体验等,每个模块自成一个文件,如用户(user.js)
templates
这个是模块,如每个网页均需要html头部和html尾部,可以写成header.php,footer.php,然后在每个页面上把头和尾包含(include或require)一次,即可统一网站风格
up 存放用户上传的图片,先按类别,再按时间分成多个文件,如/up/user/2012/2/12/xxxx.jpg

2 在必要特别保护的页面包车型大巴代码最前面加上 include (secturity1.php卡塔尔(قطر‎; 和
include (secturity2.php卡塔尔(قطر‎; 就行了

本文案例接受的PHP集成意况是自身最新透露的本子PHPWAMP8.1.8.8,不管你用的是别的集成景况,照旧自个儿设置,操作方法皆以均等的,可是自个儿恐怕提议大家使用自个儿的那款PHPWAMP,作者所集成的构件全部都是欧洲经济共同体版,完美无错省心省力,放在U盘任何时候使用(援救自定义PHP版本,多版本同不经常候运营)

根目录下,还有众多独立的php文件,那些是表现给客户的php文件,如顾客注册(register.php卡塔尔(قطر‎,登入(login.php卡塔尔,首页(index.phpState of Qatar等公事。

程序代码及详解:

 

接下去,将更详细地印证各种文件夹下作用的落真实情状势:

security1.php 特殊客商页面爱护摸板

实质上从前作者就有筹算将MSSQL整个数据库也绿化到PHP集成意况之中,不用安装直接运用。

(1)css文件夹

security2.php 日常客商页面爱慕摸板

只是MSSQL数据库面临集团是收费的,所以自个儿不敢将其绿化,万一深究起来,小编就懵逼了。

图片 2

login2.php 顾客登入页面

你们能够和蔼先安装好数据库后,根据本身的措施去老是就足以了,后边小编会详细演示整个流程。

那一个文件夹首借使把三个模块的保有css文件聚焦在协同,能够一处定义多处援用,那样当必要改进时,只须求改一处,相比便于修正和保证。

大家先来看 login2.php 的代码:

 

如上所示,commom.css就是通用的Css属性,如链接的水彩,input成分去边框,统一规定网址文字大小,还会有布满的clearfix或晶莹管理等代码,日常是会放在网址模板的头顶(/templates/header.php);home.css则根本用在首页上;jquery-ui-1.8.19.custom.css则是jquery的正经八百分界面文件

?phpsession_register(user);#增加用户名变数session_register(password); #增加密码变数session_register(tmLast); #增加时间变数if($user==){#判断是否是第一次登陆$error=Chooseyounameandinputthepasswordplease!;}$tmLast=date(U); #记录登陆时间if($user1)$user=trim($user1); #记录用户名$password=trim($password1); #记录密码if($user1$password1){if($password1==888){ #判断登陆密码是否是默认密码888结束 PHP 程式$sid=PHPSESSID=.session_id(); #保存当前session的ID号$warning=Yourpasswordisstillthedefaultpassword888,pleasechangeit.;header(Location:changePassword.php?$sidwarning=$warning); #传递警告参数warning到changePassword.php 页面exit(); #立刻结束 PHP 程式}if(strtolower($user)==root){ #判断登陆用户是否是超级用户,可以自行扩充用户$fileName=backend_index.php;}else{if(!$fileName) #判断进入登陆页面的是否是受保护页面$fileName=index.php;}$sid=PHPSESSID=.session_id(); #保存当前session的ID号header(Location:$fileName?$sid); #登陆成功进入指定页面,传递当前session的ID号,防止用户不使用 cookie 而读不到 session 值exit(); #立刻结束 PHP 程式}?htmltitle/titleheadlinkrel=stylesheethref=class/style.cssmeta;charset=gb2312/headh2LoginPage/h2?phpecho$error; #显示登陆提示?formaction=?phpecho$PHP_SELF;#提交到当前页?method=postPbName:/b?phpinclude(class/dbclass.inc); #调用dbclass.inc类,用法和 mysql.inc 类一样$q=newDB_Sql; #定义一个新的对象$q-connect($Host,$Database,$User,$Password); #连接 mysql数据库$query=selectchrUserName,chrFirstName,chrLastName.fromUser.wherechrFirstName!=.orderbychrFirstName;$q-query($query); #执行sql语句echoselectname=user1size=1;while($q-next_record()){ #从数据库中调出一般用户if($user==$q-f(0)) #判断是否是当前用户$select=selected; #是当前用户则设置为默认值else$select=;echooptionvalue=.$q-f(0).$select.ucfirst($q-f(1)).. #用户名首字大写ucfirst($q-f(2))./option;}echo/select;?/PPbPassword:/bINPUTname=password1type=password/PINPUTname=tmLasttype=hiddenvalue=?phpechodate(U)?INPUTname=fileNametype=hiddenvalue=?phpecho$fileName?PINPUTname=submittype=submitvalue=确认/P/formsecurity2.php :?phpsession_register(user); #说明同上session_register(password);session_register(tmLast);if($fileName==)$fileName=$PHP_SELF; #记录当前页面路径if($durtime==)$durtime=300; #设置 session 失效时间$currtime=date(U);if(($currtime-$tmLast)$durtime){ #判断 session是否失效//session_destroy();$error=urlencode(Seesionexpired.Loginagainplease!);header(Location:login2.php?fileName=$fileNameerror=$erroruser=$user); #跳到重新登陆页exit();}else{$tmLast=$currtime; # session 没失效则更新最后登陆时间}include(class/dbclass.inc);$q=newDB_Sql;$q-connect($Host,$Database,$User,$Password);$query=selectidUserfromUser.wherechrUserName=$user.andchrPasswd=$password;$q-query($query);if(!$q-num_rows()){ #判断是否找到密码匹配的用户$error=urlencode(PasswordiswrongorNoprivilegeuser.);header(Location:login2.php?fileName=$fileNameerror=$erroruser=$user); #跳到密码错误登陆页}else{$sid=PHPSESSID=.session_id();$q-next_record();$USERID=$q-f(idUser); #保存通过验证用户的ID号,方便以后使用}?

先来演示“当地质度量试时”常用的搭建形式,然后再演示网址在服务器上正式营业的搭建方式。

(2)images文件夹

security1.php :

其实没啥分化,首即使上行下效常规用法甚至站点管理之中的用法,让各位尤其贯虱穿杨的选拔罢了。

关键是集聚存放网址会用到的一些图纸能源,如网址不一致标准的logo,背景图片,增加和删除查改的Logo,加载Logo等等

?phpsession_register(user); #说明同上$privilege=root,macro,jackie; #设置超级用户名单列表,用,隔开$pieces=explode(,,$privilege); #取得单个超级用户名单for($i=0;$icount($pieces);$i++){if(strtolower($user)==$pieces[$i]){ #判断是否是超级用户$hasPrivilege=1;break; #跳出判断循环}}if(!$hasPrivilege){if($fileName==)$fileName=$PHP_SELF;$error=urlencode(Youhavenoprivilegetoviewthispage!);header(Location:login2.php?fileName=$fileNameerror=$errorid=$id);exit(); #跳到无权用户登陆页面}?

 

图片 3

上述顺序由 Macro Zeng保留完整解释权。

先来给我们演示php5.3连接MSSQL数据库的具体做法吧(数据库是SQL Server
二零一零)

(3)includes文件夹

在PHPWAMP中,点这里私下认可运转的是php5.3,点击运维(别的PHP版本请自行切换)

最紧假诺汇集保存业务逻辑管理公事,每一种模块独立成二个文本,这一个文件使用时,都急需进行李包裹括(include或require):

图片 4

图片 5

 

其中,

初叶后,点击这里浏览网址

a)_logOn.php是登入状态栏,并有局地飞跃菜单,算是急迅通道板:

图片 6

图片 7

 

b)baseConfigus.php则是数据库配置音讯,是一些常量,方便访谈数据库是统一代码,且不易错:

 

图片 8

在那页面包车型客车最尾巴部分,点击“点击这里查看phpinfo文件”,查看越发详实的条件内容。

c)commom.php是通用方法,如验证是还是不是登入,是或不是管理员,上传文件,呈现分页等

图片 9

d)users.php则用来管理与用户有关的事体逻辑,如校正顾客音信,登入等

 

图片 10

 

(4)js文件夹

 

图片 11

赶到phpinfo文件页面,看见这里的Thread Safety显示的是enabled,

功能结构与includes文件夹肖似,此相当的少述。

Thread
Safety是线程安全的情趣,而enabled是运转的乐趣,表明当前是线程安全。

(5)templates文件夹

 

用来存放在网址模板,整个网址的风格在那联合:

万一Thread Safety展现的不是enabled,而是disabled,那么正是非线程安全。

图片 12

看图片很明显,近期是线程安全,並且是VC6

里头,header.php定义网页的底部,每在这之中央页面从前都需求饱含它(include
/templates/header.php):

图片 13

图片 14

 

footer.php定义网页的尾巴,每当中央页面包车型大巴最终也亟需富含它:

PHP5.3以上的版本,连接MSSQL数据库不再是mssql.dll扩充,取代他的是sqlsrv.dll扩张。

图片 15

因为要筛选相应的驱动程序,所以要认清是非线程安全依然线程安全,微软公司提供了相关驱动,

中间能够饱含回顶上部分,到底层的效率,也许加上网址流量总括代码,如51la

用于PHP扶持MSSQL数据库。那么自个儿上面有那样多版本的驱动,应该选哪些吧

header_admin.php和footer_admin.php则是后台页面使用的模板,道理相通。

(PHP各版本支持MSSQL数据库的驱动下载地址请在百度查寻这一个标题“PHP扶植MSSQL数据库的驱动程序、驱动协助全体PHP版本(最全)”)

(6)up文件夹

图片 16

其一文件夹保存客商上传的各样图片,如顾客头像,付加物头像等,各成三个文件夹:

 

图片 17

 

在客商文件夹上面,按年月日举办保存。

刚刚大家张开的PHP版本是5.3,然后又是线程安全,况且phpinfo页面彰显是VC6

(7)根目录下的php文件

据此要接纳的是php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll这两个。

那么些文件,平时就是直接面向客户的,即表现给客户看的,固然事情逻辑首要在includes文件夹中集中保存,但页面中难免仍急需一些探访数据库的代码。这么些文件的一道特征是,必须带有网址模板,以联合风格:

图片 18

上面以客商登陆(login.php)为例:

由此广大顾客说连接退步,便是因为你筛选的驱动版本不平日,要对症用药才行。

a)头部

 

图片 19

 

b)尾部

 

图片 20

张开PHPWAMP版本文件所在目录。

c)中间

图片 21

图片 22

 

瞩目,这里根本是html语言写成的客户界面,供给有的重新整合:

 

css或js引用,form,提交前的卓有功用验证onsubmit=”return
validateLogin(卡塔尔国;”,以至登陆出错时保留顾客在此之前输入的新闻if($_SERVER[‘REQUEST_METHOD’]==’POST’){print
$_POST[‘name’];}等

 

d)登入提交(post情势)的处理,这里运用同一个页面举办拍卖

赶到对应的ext目录,把php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll复制进去

图片 23

那四个驱动文件三个是以pdo的章程连接,另一个则是以sqlsrv_connect的不二法门连接。

即提交时,仍跳转到当前页面,只是需求对交付方式开展决断(是get照旧post),然后做出分化的拍卖:

图片 24

中间Get格局时,若已经报到,则自动跳转到首页;假设Post形式时,时开展登陆验证,验证成功则跳转到首页,战败时滞留在现阶段页面。

 

(8).一些拍卖本事:

复制进去后如下图所示。

a)借鉴C#的String.Format方法(保存在/includes/commom.php中):

图片 25

图片 26

 

选择时,很有益于,如打字与印刷从数据库中读出的数据时:

 

图片 27

 

b)由于上述一步a)的点子访谈时,关于引号(单引号和双引号的主题素材),不时难以开展转义或转义时即出错,由此,恐怕灵活应用jquery来进展事件绑定(而非html成分事件的措施),如删减前的承认提醒:

好,接着下一步,张开对应版本的PHP配置文件

图片 28

图片 29

本文由bluesky原创,具备独立产权,如转发请表明出处。

 


 

 

在打开的php.ini文件中

extension=php_sqlsrv_53_ts_vc6.dll

extension=php_pdo_sqlsrv_53_ts_vc6.dll

加入地点这两行,然后搜索“mssql.secure_connection”这一段内容,

将“mssql.secure_connection = Off”改为“mssql.secure_connection = On”

图片 30

 

 

修改达成后,双击此处重启当前apache服务器就能够。

图片 31

 

 

重启后,在phpinfo页面假诺能搜到sqlsrv,表达已经成功安插好了,如图所示。

图片 32图片 33

 

 

 

接下去我们来连接一下数据库,看是还是不是平常!

在测验数据库在此之前,大家先来查阅一下多少库端口号是不怎么,右键“新建查询”

图片 34

 

 

输入exec sys.sp_readerrorlog 0, 1, ‘listening’ 然后右键点击试行。

图片 35

 

意识端口号是暗中认可的1433,那样我们在接连数据库的时候就无需钦命端口号了,

因为是私下认可端口,全体大家得以在PHP页面能够如此写。代码随意打打,注解能一连上就能够了。

 

<?php

 try {
   $dbName = "sqlsrv:Server=127.0.0.1;Database=lccee";   //这里是服务器IP地址和数据库名,端口不是默认的话记得改一下
   $dbUser = "sa";    //用户名
   $dbPassword = "111111";    //登陆密码

   $db = new PDO($dbName, $dbUser, $dbPassword);   

   if ($db)   
  {       
     echo "恭喜你!数据库连接成功了!!<br />";   
   }


     }
        catch (Exception $e){ echo "数据库连接失败!!";   }

?>

 

 

万一不是暗许端口,假诺是1688端口,那么地点这一行就相应改为。

$dbName = "sqlsrv:Server=127.0.0.1,1688;Database=lccee";

金科玉律,就终于暗中认可端口,你也可以加上暗许端口号,也是没有错的,如下代码所示。

$dbName = "sqlsrv:Server=127.0.0.1,1433;Database=lccee";

易错点:这里的ip+端口,不是冒号!而是逗号,假使写成“127.0.0.1:1433”是破绽百出的!

 

 

好,大家开发此页面看看效果,运转代码提示连接成功,表达没难题。

图片 36

 

 

一经作者把连接里面的数据库密码改一下,再看,就提醒战败了,如下图。

图片 37

 

 

 

 

眼下我们不是在php配置里投入了四个DLL吗,分别是

php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll

那三个驱动文件四个是以pdo的艺术连接,另三个则是以sqlsrv_connect的方法连接。

 

 

而地点大家演示的连接格局是pdo,现在大家来用sqlsrv_connect的章程连接。

那么代码能够如此写,创设多少个sqlsrv_connect.php文件,里面写上如下代码

<?php

$serverName = "NEPTUNE-PC"; //serverNameinstanceName
$connectionInfo = array( "Database"=>"lccee", "UID"=>"sa", "PWD"=>"111111");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
 
if( $conn ) {
     echo "连接成功<br />";
}else{
     echo "连接失败<br />";
     
}

?>

 

然后再测量试验看,也是连连成功了!

图片 38

 

 

假如作者把科学的密码111111改成了错误的密码888888,

(具体的数据库密码,看您和谐的MSSQL数据库,小编的密码是111111)

图片 39

 

那正是说就显得一连错误了,把正确密码改成错误今后,就突显一而再退步了。

图片 40

 

 

 

下边大家再改一下代码,读取数据库表里的剧情,那是本身创立的数据库,

数据库名称叫Lccee,在此个数据Curry面有个表叫phpwamp。

图片 41

 

 

 

然后自个儿任由加多几行代码,用来读出数据表里面包车型客车内容。

<?php

$serverName = "NEPTUNE-PC"; //serverNameinstanceName
$connectionInfo = array( "Database"=>"lccee", "UID"=>"sa", "PWD"=>"111111");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
 
if( $conn ) {
     echo "连接成功<br />";
}else{
     echo "连接失败<br />";
     
}

$query ="select * from phpwamp";
$result = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array($result)){
 
       print_r($row);
       echo "<br>";
}

?>

 

 

下一场保留,当时大家再来看看,运维后就读出那么些数额表里的开始和结果了。

图片 42

 

 

 

 

最终大家再演示一下,在服务器上用站点处理成立的站点怎么着连接MSSQL数据库。

 

初始我们的课程,第一步先把主分界面修改成80端口,如下图所示。

图片 43

图片 44

 

 

 

修正端口后切换成自由处在apache2.4之下的PHP版本,php5.5、php5.6、php7都得以。

图片 45

 

 

 

接下来张开apache2.4站点管理,如下图所示。

图片 46

 

 

构建站点,如图所示(Apache2.4站点管理可创制无数站点,各种站点可钦定分歧的PHP版本,也能够自定义设置PHP版本,还足以几个不等PHP版本同时运行,右键作用丰硕)如图下所示,笔者选的是php5.4那一个本子,填写完成后点击“增添站点”

图片 47

 

 

增添后左边站点列表里就相会世了丰裕的站点,右键站点接受“生成此站hosts内容”

图片 48

 

 

下一场点击这里的按键去运营站点,如下图土褐箭头所示。

图片 49

 

右键站点,采用“域名浏览该网址”,就足以用域名浏览(在服务器上再开展域名分析就能够了)

只要不懂什么分析,能够看看自家那篇随笔

图片 50

 

 

 

点击“域名浏览该网站”后,大家就足以看出那一个页面,如下图所示。

图片 51

 

 

 

鼠标带动滚动条往下看,在那地点击查阅特别详细的phpinfo(卡塔尔消息。

图片 52

 

 

 

可以看见在phpinfo文件页面,这里的Thread Safety展现的是enabled,

Thread Safety是线程安全,而enabled是运营,那么证明当前是线程安全。

图片 53

 

 

日前的PHP版本是php5.4,所以我们应有选取的五个DLL文件是

php_pdo_sqlsrv_54_ts.dll 和 php_sqlsrv_54_nts.dll,如下图

图片 54

 

 

 

和后面同样把那八个DLL复制到对应PHP版本的ext文件夹里面。

图片 55

 

 

那会儿大家回来站点管理分界面,右键站点展开与之相应的php.ini配文件。

图片 56

 

 

在开垦的php.ini文件中

extension=php_sqlsrv_54_ts.dll

extension=php_pdo_sqlsrv_54_ts.dll

投入位置这两行,然后搜索“mssql.secure_connection”这一段。

把“mssql.secure_connection = Off”改为“mssql.secure_connection = On”

图片 57

 

 

 

改正后保存,再一次重启Apache服务,创制三个sqlsrv_connect.php文件,里面写上如下代码

<?php


$serverName = "NEPTUNE-PC"; //serverNameinstanceName
$connectionInfo = array( "Database"=>"lccee", "UID"=>"sa", "PWD"=>"111111");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
 
if( $conn ) {
     echo "连接成功<br />";
}else{
     echo "连接失败<br />";
     
}

$query ="select * from phpwamp";
$result = sqlsrv_query($conn, $query);
while($row = sqlsrv_fetch_array($result)){
 
       print_r($row);
       echo "<br>";
}

?>

 

 

接下来浏览sqlsrv_connect.php文件,就能够读出数据Curry面包车型地铁音讯了,如下图

图片 58

其余PHP版本也是同一的道理,依葫芦画瓢就能够,如有疑问能够沟通自身。

 

今后只要时间允许,作者也会酌量构建二个Linux下的PHPWAMP,应网上好朋友的需求,Mac系统的也在思考,可是对Mac系统不是特意询问,要求自然时间研讨研究,方今做事也挺忙的,壹个人日子有限,预计进程会极慢。

最后笔者会在PHPWAMP版本里安排好各版本PHP与MSSQL的连接,届时你们就无须本身安顿了

 

 

PHP各版本帮忙MSSQL数据库的驱动下载地址请在百度寻觅那些标题“PHP扶植MSSQL数据库的驱动程序、驱动援救具有PHP版本(最全)”

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注