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中创建一个表并插入数据
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",指定编码方式即可