win10系统php配置连接sql server最全教程(解决中文乱码问题)

1,查看phpinfo()

php版本:7.0,nts,x86

2,安装sqlserver扩展

打开链接https://www.microsoft.com/en-us/download/details.aspx?id=20098,点击Download,选择SQLSRV40.EXE下载

下载后的SQLSRV40.EXE解压得到

3,根据php版本选择对应的扩展

php版本为7.0,nts,x86,所以选择了如下两个文件复制到对应的php的ext文件夹中

 

4,修改php.ini

添加代码引入扩展

extension=php_pdo_sqlsrv_7_nts_x86.dll
extension=php_sqlsrv_7_nts_x86.dll

5,重启服务器查看phpinfo()是否引入sqlsrv和pdo_sqlsrv

6,安装msodbcsql.msi

下载地址https://www.microsoft.com/en-us/download/details.aspx?id=50420根据电脑系统选择对应版本

下载后一直下一步默认安装即可。

7,sql server中创建一个表并插入数据

创建表如何用SQL Server创建数据表

插入数据SQL Server插入数据和删除数据

8,php连接sqlserver

可参考官方提供的例子如何:使用 Windows 身份验证进行连接以及如何:使用 SQL Server 身份验证进行连接

1,第一种连接方式

<?php  
// header('Content-Type:text/html; charset=utf-8;'); 
//charset改成gbk则php输出中文乱码,sqlserver输出正常
$serverName = "DESKTOP-G21QSD\SQLEXPRESS";  
$connectionInfo = array( "Database"=>"test","CharacterSet" => "UTF-8");  
$conn = sqlsrv_connect( $serverName, $connectionInfo); 
if( $conn === false )  
{  
     echo "Unable to connect.</br>";  
     die( print_r( sqlsrv_errors(), true));  
}else{
	echo "连接成功. </br>";  
	$sql = "select * from table_1";
	$result = sqlsrv_query($conn, $sql);
	while ( $re = sqlsrv_fetch_array($result)) { 
		// $re = iconv('GBK','UTF-8',$re[0]);  //只能转字符串
		print_r($re);
	}
}

2,第二种连接方式使用 PDO_SQLSRV 驱动连接

<?php  
try {  
   $conn = new PDO( "sqlsrv:Server=DESKTOP-G21QSD\SQLEXPRESS;Database=test", NULL, NULL);   
   $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
}  
  
catch( PDOException $e ) {  
   die( "Error connecting to SQL Server. </br>" );   
}  
  
echo "Connected to SQL Server. </br>";  
  
$query = 'select * from table_1';   
$stmt = $conn->query( $query );   
while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ){   
   print_r( $row );   
} 

9,解决数据库中的中文数据在页面显示乱码的问题

1)使用第二种pdo_sqlsrv驱动的方式中文显示正常

2)使用第一种连接方式方式:

如果设置header('Content-Type:text/html; charset=utf-8;'); 输出数据库中的中文正常,但是php中输出的输出的中文字符(比如echo)就成了乱码,所以该方法行不通;

按照网上其他说法修改数据库中字段类型为navchar也没有效果(第一次修改字段会被阻止保存要求创建表的修改请参考SQL Server 2008|2012 阻止保存要求重新创建表的更改

有效的解决方式:

在连接的$connectionInfo中设置"CharacterSet" => "UTF-8",指定编码方式即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值