PHP连接MSSQL2008/2005数据库(SQLSRV)配置

 更新时间:2016年11月25日 16:35  点击:1679
PHP连接MSSQL2008/2005数据库与以往的连接mssql2000是不一样的,连接mssql2008/2005是需要自己添加PHP对MSSQL连接的驱动扩展了,而我们常用的hp.ini中的extension=php_mssql.dll扩展只适用连接于MSSQL2000哦,下面我们就来看看解决办法

1.下载扩展

(1)去官方下载一个SQL Server Driver for PHP的扩展包,我是在这里下载的http://www.microsoft.com/en-us/download/details.aspx?id=20098【记得下载后好像是要先安装然后再解压】
  (2)您也可以直接从本站下载(我之前下载的,来源于microsoft官方)【 点击直接下载 】
将下载下来的rar文件解压后你就会得到一堆的.dll文件


下载驱动程序,下载后安装释放程序,里面有以下文件:

php_pdo_sqlsrv_52_nts.dll

php_pdo_sqlsrv_52_ts.dll

php_pdo_sqlsrv_53_nts_vc6.dll

php_pdo_sqlsrv_53_nts_vc9.dll

php_pdo_sqlsrv_53_ts_vc6.dll

php_pdo_sqlsrv_53_ts_vc9.dll

php_sqlsrv_52_nts.dll

php_sqlsrv_52_ts.dll

php_sqlsrv_53_nts_vc6.dll

php_sqlsrv_53_nts_vc9.dll

php_sqlsrv_53_ts_vc6.dll

php_sqlsrv_53_ts_vc9.dll

SQLServerDriverForPHP.chm(手册,英文够好的话,可以看看,嘿嘿)

SQLServerDriverForPHP_License.rtf

SQLServerDriverForPHP_Readme.htm(自述文件)

2.添加扩展

  根据(vc6/vc9)需要选择扩展,我的环境是WAMP(php5.2.6/apache2.2.8),我选用的是php_sqlsrv_52_ts_vc6.dll,php_pdo_sqlsrv_52_ts_vc6.dll这两个文件,复制到wamp安装目录下的ext目录下,我的ext目录是在wamp/bin/php/php5.2.6/ext/

3.配置php.ini

(1)在php.ini的Dynamic Extensions中添加如下两条扩展:
    extension=php_sqlsrv_52_ts_vc6.dll
    extension=php_pdo_sqlsrv_52_ts_vc6.dll

(2)将;extension=php_pdo.dll前面的;去掉,开启pdo连接扩展

(3)重新启动apache
4.连接数据库(pdo连接)

 代码如下 复制代码

<?php
  $servern="SFKFK27EL8FJ\SQLTRY";
  $coninfo=array("Database"=>"try2","UID"=>"sa","PWD"=>"123");
  $conn=sqlsrv_connect($servern,$coninfo) or die ("连接失败!");
  $val=sqlsrv_query($conn,"select * from usertable");
  while($row=sqlsrv_fetch_array($val)){
    echo $row[1]."<br />";
  }
  sqlsrv_close($conn);
?>

5.例子

链接示例:

mssql_lib.php

 代码如下 复制代码

<?php


class DB {
    var $con = null;
    function __construct($dbhost,$dbuser,$dbpass,$dbname) {
        $connectionInfo =  array("UID"=>$dbuser,"PWD"=>$dbpass,"Database"=>$dbname);
        $this->con = sqlsrv_connect($dbhost,$connectionInfo);
    }

    function query($sql){
        $result = sqlsrv_query($this->con, $sql);
    }

    function getRow($sql){
        $result = sqlsrv_query($this->con, $sql);
        $arr = array();
        while($row = sqlsrv_fetch_array($result))
        {
            $arr[] = $row;
        }
        return $arr[0];
    }

    function getAll($sql){
        $result = sqlsrv_query($this->con, $sql);
        $arr = array();
        while($row = sqlsrv_fetch_array($result))
        {
            $arr[] = $row;
        }
        return $arr;
    }

    function __destruct() {
        unset($con);
    }

}
test.php

//简单调用
$db = new DB(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$sql = "select * from crm_order_batch where (status=0 or status is null) and lock_id is not null  ";
$orders_add_list = $db->getAll($sql);

phpexcel可以让开发者方便快捷的来操作xls文件了,我们下文来整理几个关于phpexcel对数据导入与导出例子。

PHPExcel读取excel文件

实例代码:
 

 代码如下 复制代码
    require_once('include/common.inc.php');
    require_once(ROOTPATH . 'include/phpExcel/PHPExcel/IOFactory.php');
   
    $filePath = './file/xls/110713.xls';
   
    $fileType = PHPExcel_IOFactory::identify($filePath); //文件名自动判断文件类型
    $objReader = PHPExcel_IOFactory::createReader($fileType);
    $objPHPExcel = $objReader->load($filePath);
   
    $currentSheet = $objPHPExcel->getSheet(0); //第一个工作簿
    $allRow = $currentSheet->getHighestRow(); //行数
    $output = array();
    $preType = '';
   
    $qh = $currentSheet->getCell('A4')->getValue();
    //按照文件格式从第7行开始循环读取数据
    for($currentRow = 7;$currentRow<=$allRow;$currentRow++){
        //判断每一行的B列是否为有效的序号,如果为空或者小于之前的序号则结束
        $xh = (int)$currentSheet->getCell('B'.$currentRow)->getValue();
        if(empty($xh))break;
       
        $tmpType = (string)$currentSheet->getCell('C'.$currentRow)->getValue(); //赛事类型
        if(!empty($tmpType))$preType = $tmpType;
        $output[$xh]['type'] = $preType;
        $output[$xh]['master'] = $currentSheet->getCell('F'.$currentRow)->getValue(); //主队
        $output[$xh]['guest'] = $currentSheet->getCell('H'.$currentRow)->getValue(); //客队   
    }
   
    //从当前行开始往下循环,取出第一个不为空的行
    for( ; ; $currentRow++){
        $xh = (int)$currentSheet->getCell('B'.$currentRow)->getValue();
        if(!empty($xh))break;
    }
   
    for( ; $currentRow <= $allRow; $currentRow++){
        $xh = (int)$currentSheet->getCell('B'.$currentRow)->getValue();
        if(empty($xh))break;
       
        $output[$xh]['rq'] = $currentSheet->getCell('I'.$currentRow)->getValue();
    }
    header("content-type:text/html; charset=utf-8");
   
    echo '期号:' . $qh . "\n\n";
    if(!empty($output)){
        printf("%-5s\t%-15s\t%-40s\t%-40s\t%-5s\n", '序号', '赛事类型', '主队', '客队', '让球值');
        foreach($output as $key => $row){
            $format = "%-5d\t%-15s\t%-40s\t%-40s\t%-5s\n";
            printf($format, $key, $row['type'], $row['master'], $row['guest'], $row['rq']);
        }
    }
?>

phpexcel导出excel数据

在服务器端生成静态文件

相比直接生成,这两种方法的主要区别是生成格式的不同,模板文件完全相同,下边是一个在上例基础上更改后的样子,注意与上例的区别。
 

 代码如下 复制代码

<?php 
// 包含class的基本头文件
include("./class/class.php");

// 生成excel的基本类定义(注意文件名的大小写)
include("./class/phpexcel/PHPExcel.php");
// 包含写Excel5格式的文件,如果需要生成excel2007的文件,包含对应的Writer即可
include("./class/phpexcel/PHPExcel/Writer/Excel5.php");
// 包含写PDF格式文件
include("./class/phpexcel/PHPExcel/Writer/PDF.php");

// 创建phpexcel对象,此对象包含输出的内容及格式
$m_objPHPExcel = new PHPExcel();

// 模板文件,为了实现格式与内容分离,有关输出文件具体内容实现在模板文件中
// 模板文件将对象$m_objPHPExcel进行操作
include("./include/excel.php");

// 输出文件的类型,excel或pdf
$m_exportType = "pdf";

$m_strOutputExcelFileName = date('Y-m-j_H_i_s').".xls"; // 输出EXCEL文件名
$m_strOutputPdfFileName = date('Y-m-j_H_i_s').".pdf"; // 输出PDF文件名

// 输出文件保存路径,此路径必须可写
$m_strOutputPath = "./output/";

// 如果需要输出EXCEL格式
if($m_exportType=="excel"){
$objWriter = new PHPExcel_Writer_Excel5($m_objPHPExcel);
$objWriter->save($m_strOutputPath.$m_strOutputExcelFileName); 
}

// 如果需要输出PDF格式
if($m_exportType=="pdf"){
$objWriter = new PHPExcel_Writer_PDF($m_objPHPExcel);
$objWriter->save($m_strOutputPath.$m_strOutputPdfFileName); 
}
?>

memcache是一个分布式的数据处理插件,我们可以利用它来提高服务器性能,特别是对数据库的操作用了memcache它之后会有非常大的提升哦,下面我来给各位介绍一个php memcache使用例子。

一般来说,如果并发量不大的情况,使不使用缓存技术并没有什么影响,但如果高并发的情况,使用缓存技术就显得很重要了,可以很好的减轻数据库和服务器的压力,当然解决高并发的技术有很多,这里只是以缓存的角度来说明使用memcache的便捷性和方便性,缓存技术中,与memcache类似的还有redis,这里不做介绍!

使用memcache的前提是需要在服务端先配置好memcahche的环境!确认memcahce可以正常连接之后就可以在程序使用了!

具体代码如下:

 代码如下 复制代码

<?php
header("content-type:text/html;charset:utf-8");
include "../inc/str.php";
include "../Inc/mysql.php";
include "../Inc/const.php";  
if($is_memcache){    
    // $memcache操作    
    $memcache = new Memcache;    
    try{        
        $memc=@$memcache->connect($memcache_server, $memcache_port);    
        if($memc){
            $getMsg=$memcache->get("360GetMsgDate");//获取缓存中的数据
            // $memcache->delete("360GetMsgDate");
            if(!$getMsg){  
                $jsonDate = getMessage($f_serverName,$f_userName,$f_password,$f_htNewsDate);
                $memcache->set("360GetMsgDate",$jsonDate,0,3600); //设置缓存时间为一小时
                echo $jsonDate;
            }
            else{     
                 echo $getMsg;
            }       
            $memcache->close();
        }
        else{
            //code
        }
    }catch(Exception $e){
        print $e->getMessage();
    }
    unset($memcache);
    //结束$memcache操作
}else{
  echo  getMessage($f_serverName,$f_userName,$f_password,$f_htNewsDate);
}

如果你mysql查询出来乱码的话,多半是中文乱码了了,这种问题解决办法只需要统一页面与数据连接时的编码设置就可以解决,下面总结了些方法。

在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:

 代码如下 复制代码
1 $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
2 mysql_query("SET NAMES 'GBK'");

数据库字符集为utf-8

连接语句用这个
 

 代码如下 复制代码

1 mysql_query("SET NAMES 'UTF8'");
2 mysql_query("SET CHARACTER SET UTF8");
3 mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");

这些方法都在php 连接mysql之前进行设置操作了,如例子

 代码如下 复制代码

set_time_limit(0);
mysql_connect('localhost','root','root');
mysql_select_db('sms');
mysql_query("set Names 'gbk'");

这样就是设置我的页面与数据库统一编码了,是不是简单呀,那么如果是导入数据乱码解决办法不一样

linux系统中

linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题。

解决mysql导入导出数据乱码问题

首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8,

例如下面的代码:

mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql

 那么导入数据的时候也要使用--default-character-set=utf8:


mysql -uroot -p --default-character-set=utf8 dbname < bak.sql


这样统一编码就解决了mysql数据迁移中的乱码问题了


我使用windows作为导出数据源,并导入 freebsd环境下的mysql库

解决方法:

导出数据

一、首先在windows平台下mysql用作导出数据库源。查看字符编码的系统变量:

 mysql> show variables like ‘%char%';
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | D:mysqlsharecharsets |

+————————–+—————————-+

查看character_set_database,这里是latin1,latin1是装不了多字节字符集的

二、在windows下设置系统变量为utf8


mysql>set character_set_database=utf8; ##设置默认的字符集为utf8


三、导出数据


mysql> select * from table into outfile ‘c:table.txt' where +条件


这时导出了我想要的部分数据,并以txt文件存在 table.txt中。

导入数据

在freebsd平台下

一、同样设置字符编码的系统变量

 mysql> show variables like ‘%char%';

+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | gbk |
| character_set_system | utf8 |

+————————–+—————————-+

mysql>set character_set_database=utf8; ##设置默认的字符集为utf8


二、转载数据


mysql>load data local infile ‘/home/table.txt' into table `table`;

至此、条件数据完整导入导出,并处理了乱码的情况。
总之,两台mysql服务器导入导出时,一定要确保两台服务器的character_set_database参数相同,这样才能防止一些 乱码的情况。当然我们还可以使用其他字符集,如gbk来进行调整。视情况操作了

附后,通用解决办法

方法一: 通过增加参数 –default-character-set = utf8 解决乱码问题
mysql -u root -p password < path_to_import_file –default-character-set = utf8

方法二: 在命令行导入乱码解决

1. use database_name;
2. set names utf8; (或其他需要的编码)
3. source example.sql (sql文件存放路径)
 

下面来看一个关于利用jqgrid+加mysql的text类型实现简单自定义数据模型例子,希望对各位有帮助哦。
有的时候,我们做东西可能速度和安全在前期并不是我们考虑的重点,数据的灵活性可能对于一个不成熟的系统更加重要,这里我使用thinkphp+mysql+jqgrid做了一个简单的自定义数据模型。简单总结一下。
以前我也写过一个自定义模型:php一种不增加字段的自定义表单实现,但是当时因为没有jqgrid这样比较好用的工具,所以当时那个还是比较麻烦,这次当然也是不增加字段的,利用数据的text类型加json数据,实现虚拟的“表”。听到这里,有的同学应该知道,如果我们使用mongodb其实做起来就更加的灵活和简便。但是,因为这个东西比较小,就先这样用着了。
如图:利用jqgrid+加mysql的text类型实现简单自定义数据模型
首先功能特点
通过配置文件,动态配置字段的key,类型,排序,显示,是否必填等等
比如图片类型,定义为image即可,

看一下配置文件

 代码如下 复制代码

<?php
return array(
    //包名前缀
    'pack_pre' => 'Pack_',
    //商品管理字段配置
    /**
     * key为字段索引、存储字段
     * name为字段显示名称
     * required是否必填1是0不是
     * hidden:列表是否显示,1隐藏,0显示,此选项会影响搜索,但不影响编辑
     * type类型:<img,url,text>三种类型
     * 字段显示顺序与key的顺序一致
    */
    'goodsfield' => array(
        //id为系统保留字段
        //商品名
        'title' =>array(
            'name'    =>'商品名',
            'hidden'  =>0,
            'required'=>1,
            'type'    =>'text',
        ),
        //spu
        'spu' =>array(
            'name'    =>'spu',
            'hidden'  =>0,
            'required'=>1,
            'type'    =>'text',
        ),
        //图片地址
        'image' =>array(
            'name'    =>'图片地址',
            'hidden'  =>0,
            'required'=>1,
            'type'    =>'img',
        ),
        //url
        'url' =>array(
            'name'    =>'详情地址',
            'hidden'  =>0,
            'required'=>1,
            'type'    =>'url',
        ),

    ),
    //以下两个映射针对goodsfield而言
    //goods_info api map,无映射即使用原字段
    'goodsinfomap'=>array(

    ),
    //pack post api map,商品包下发amc字段映射无映射即使用原字段
    'map'=>array(

    ),
);


可以通过配置,非常方便修改,并一改全改,增删改。
2,html的jqgrid代码

 代码如下 复制代码
jQuery("#goodsList").jqGrid({
       url:'__APP__?m=Home&a=getList',
    datatype: "json",
    mtype: 'POST',
       colNames:['ID',<{$feildname}>,'修改时间','操作'],
       colModel:[
           {name:'id',width:25,index:'id',setGridHeight:"auto"},
        <{$feildmap}>
        {name:'lastdotime',sortable:true},
        {name:'edit',search:false,sortable:false},
       ],
       rowNum:10,
       rowList:[10,20,30],
    multiselect:true,  //复选框
       pager: '#goodsPager',
       sortname: 'lastdotime',
    viewrecords: true,
    sortorder: "desc",
    editurl:'__APP__?m=Home&a=oper',//添加修改操作url
    autowidth:true,
    height:'100%'
});

3,三个比较重要的函数

 

 代码如下 复制代码
<?php
//获取字段名称
function feild_name($feild){
    $fields = C($feild);
    $feild = '';
    foreach($fields as $val){
        $feild .="'".$val['name']."',";
    }
    $feild = rtrim($feild,',');
    return $feild;
}
//获取字段字典
function feild_map($feild){
    $fields = C($feild);
    $feildmap ='';
    foreach($fields as $key=>$val){
        $feildmap .= '{name:\''.$key.'\',sortable:false,editable:true';
        if(1==$val['hidden']){
            $feildmap .=',hidedlg:true,hidden:true,editrules:{edithidden:true,';
        }else{
            $feildmap .= ',editrules:{';
        }
        if(1==$val['required']){
            $feildmap .='required:true}';
        }else{
            $feildmap .='required:false}';
        }
        $feildmap .= '},'."\n";
    }
    return $feildmap;
}
//获取字段列表
function feild_list($feild,$array=array(),$row=array()){
    $row = json_decode($row['value'],true);
    $fields = C($feild);
    foreach($fields as $key=>$val){
        switch($val['type']){
            case 'url':$array[]='<a href="'.$row[$key].'" style="color:#0018D1" target="_blank">'.$row[$key].'</a>';break;
            case 'img':$array[]='<img src="'.$row[$key].'" width="60" />';break;
            default:$array[] = $row[$key];
        }
    }
    return $array;
}

代码没有什么,就是通过json对象动态配置。

[!--infotagslink--]

相关文章

  • IntelliJ IDEA2021.1 配置大全(超详细教程)

    这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下...2021-04-18
  • Windows VPN服务器配置图文教程 超详细版

    VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • Tomcat配置及如何在Eclipse中启动

    这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • Laravel4安装配置的方法

    如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
  • php简单数据操作的实例

    最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • 解决Mybatis 大数据量的批量insert问题

    这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • Antd-vue Table组件添加Click事件,实现点击某行数据教程

    这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17
  • 详解如何清理redis集群的所有数据

    这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • vue 获取到数据但却渲染不到页面上的解决方法

    这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • php把读取xml 文档并转换成json数据代码

    在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
  • mybatis-plus 处理大数据插入太慢的解决

    这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21