PHP操作MS SQL Server 2014数据库的通用函数

  PHP作为一门优秀的后端开发语言在一段时间里很流行,但现在慢慢沉寂下来,涉及它的开发文章也少了许多,很多的开发者似乎忘记或者忽视了它曾有过的强大和灵活。

  其实,ASP、PHP、JSP做为后端开发语言的顶梁柱,它们的功能都差不多,三者都很优秀难分高下。ASP有微软作为靠山,说它不强大是说不过去的;JSP有Java背书,并且曾经在相当长时间为企业级应用作为支撑,历经百炼,强大是有目共睹的;唯有PHP,不实际使用它,你感受不到它的强大。

  函数实在是太多太丰富了。

  ⒈操作数据库

  假设$DBConn为连接对象,$sql为操作语句,那么

  $dbconn->exec($sql)是直接执行SQL语句,返回受影响的行数。适用于不需要绑定参数的简单查询,如插入、更新和删除数据等。

  $dbconn->query($sql)是执行SQL语句并返回一个结果集对象。适用于需要获取结果集的查询,如查询数据等。

  $dbconn->prepare($sql)是准备SQL语句并返回一个预处理语句对象。适用于需要重复执行多个相似的查询,并且需要绑定参数以避免SQL注入攻击的情况。

  ⒉处理返回的结果

  假设数据库连接对象为$dbconn,查询操作的sql语句为$sql=“SELECT id, name, age FROM users”,$reslut=$dbconn->query($sql),对于结果集的fetch操作有很多参数:

  ⑴ PDO::FETCH_ASSOC: 返回关联数组形式的结果集。  

// 使用 PDO::FETCH_ASSOC 参数获取关联数组形式的结果集
$row = $result->fetch(PDO::FETCH_ASSOC);
echo $row['id'], $row['name'], $row['age'];

  ⑵ PDO::FETCH_NUM: 返回索引数组形式的结果集。

// 使用 PDO::FETCH_NUM 参数获取索引数组形式的结果集
$row = $result->fetch(PDO::FETCH_NUM);
echo $row[0], $row[1], $row[2];

  ⑶ PDO::FETCH_BOTH: 返回既包含关联数组又包含索引数组的结果集。

// 使用 PDO::FETCH_BOTH 参数获取既包含关联数组又包含索引数组的结果集
$row = $result->fetch(PDO::FETCH_BOTH);
echo $row['id'], $row[1], $row['age'];

  ⑷ PDO::FETCH_OBJ: 返回对象形式的结果集。

// 使用 PDO::FETCH_OBJ 参数获取对象形式的结果集
$row = $result->fetch(PDO::FETCH_OBJ);
echo $row->id, $row->name, $row->age;

  有了上面的基础,写PHP访问MS SQL Server 2014的数据库操作就比较容易了。
  对于PHP操作MS SQL Server 2014数据库,总的来说,无非就是增加记录、删除记录、修改记录、查询记录和统计记录这5种操作,对应的只需要写三个函数就可以搞定。

<?php
	require 'DBLinkConfig.php';	
	$returnArr=[];//准备返回的数组
	function AddDelUpdate($DBConn,$sql){
		$Arr=[];//准备返回的数组	
		$result = $DBConn->exec($sql);
		if ( $result>0 ) {
			$Arr['data']='OK';
		}else{
			$Arr['data']="数据记录操作错误!";	
		}
		return $returnArr;
	};
    //测试数据
	//$sql = "insert into EisUser(C01,C02,C03,C04,C05) values('1111','2222','333','44','55')";
	//$sql = "delete from EisUser where C01='1'";
	//$sql = "update EisUser set C02='明天' where C01='11'";
	//$returnArr=AddDelUpdate($DBConn,$sql);
	
	function Query($DBConn,$sql){
		$Arr=[];//准备返回的数组
		$result = $DBConn->query($sql);
		$rows =$result->fetchAll(PDO::FETCH_ASSOC);
		if( sizeof($rows)>0 ){
			//echo sizeof($rows);
			$Arr['data']=$rows;
		}else{
			$Arr['data']=0;
		}
		return $Arr;
	}
    //测试数据
	//$sql = "select * from EisUser ";
	//$returnArr=Query($DBConn,$sql);
	
	function statistics($DBConn,$sql){
		$result = $DBConn->query($sql);
		$rows = $result->fetch();
		return $rows[0];
	}
    //测试数据
	//$sql = "select count(*) from EisUser where C01='11'";
	//$returnArr['rows']=statistics($DBConn,$sql);
	
	header('Content-type:text/json');
	echo json_encode($returnArr,JSON_UNESCAPED_UNICODE);
?>

  看来的确很简单,三个函数就可以作为一个应用的后端支持。

  事实上,问题不是这么简单,因为有的要素没有考虑到。

  ⒈SQL注入

  如果所有对数据库的操作都是这样的函数调用,那么难以避免SQL注入问题。

  解决方法:比如使用拦截器或者路由解析,SQL语句不能由前端生成,只能由后端程序来生成。

  ⒉功能过于单一,没有涉及多媒体数据的存储和提取

  对于简单不涉及多媒体数据存储的应用,上面的函数是可以应对的,做好应用安全就可以。但是对于复杂一些的功能要求就必须另行开发,比如上传多媒体文件等功能。

  ⒊特定前端应用对于返回数据格式的要求

  特别是对分页数据的格式要求,比如LayUI、Vue、EasyUI的要求格式有差别,还有一些特殊应用的格式要求等等。

  要满足上面的要求,还必须增加一些函数来处理。

  我记得网上有培训老师讲不要学习JSP和ASP,因为它们都属于淘汰的技术了,我听了不以为然,怎么可能?!现在都是前后端分离,ASP和PHP只返回需要的JSON或者XML数据即可。同样,JSP与Servlet可能只有技术细节上的差异,也不可能这么快被淘汰,只是现在使用的人的确少了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值