【背景】:因为小编公司要求,需要php去连接操作SQL server数据库;这个问题困扰了小编一周的时间老烦人了,为了小编自己也为了帮助跟小编有同样困惑的猿友们,所以决定抽个时间好好记录一下该问题,以防以后遗忘;本次方法,小编亲测可用,希望能帮助到大家。
一、运行环境
操作系统 = Linux Centos7.4
服务器软件 = Nginx1.18
脚本语言:PHP7.4
数据库:SQL server2012
框架:Laravel5.2
特殊要求:gcc4.8版本以上(版本太低的话,无法编译pdo_sqlsrv )
二、php连接 SQL server 需要安装php的2个扩展(pdo_sqlsrv 和 sqlser)
1.先下载pdo_sqlsrv源码包(所有Linux操作最好都使用root用户权限)
pecl install pdo_sqlsrv
pecl install sqlser
三、配置laravel
1.在laravel目录中找到.env文件;这是个隐藏文件,我们可以用ll -a去找到它,并找到APP_URL=http://localhost,在其下面加上以下字段。
DB_CONNECTION=sqlsrv
DB_HOST=连接IP
DB_DATABASE=master(初始数据库)
DB_USERNAME=连接数据库用户名
DB_PASSWORD=连接密码
2.找到laravel目录下的laravel\config\database.php,并打开在其'connections' => []中加入以下信息:
'sqlsrv'=> [
'driver'=>'sqlsrv',
'host'=> env('DB_HOST','连接IP'),
'database'=> env('DB_DATABASE','master'),
'username'=> env('DB_USERNAME','连接数据库用户名'),
'password'=> env('DB_PASSWORD','连接密码'),
'charset'=>'utf8',
'prefix'=>'',
],
3.在laravel\app\Http\routes.php配置测试路由
Route::get('test', 'IndexController@server_test');
4.在laravel\app\Http\Controllers\IndexController.php新建server_test函数
//SQLserver连接测试
public function server_test(){
//php用pdo_sqlsrv驱动源码连接
/* $conn = sqlsrv_connect('连接IP',array('Database'=>'master','UID'=>'用户名','PWD'=>'密码'));
if($conn == false){
var_dump(sqlsrv_errors());exit;
}
$sql = "SELECT TOP 1000 * FROM [dbo].[spt_monitor]";
$result = @sqlsrv_query($conn, $sql);
while ( $re = @sqlsrv_fetch_array($result)) {
dump($re);
}*/
//laravel内置DB类连接
$res = DB::table('dbo.spt_monitor')->get();
dd($res);
}
四、这个时候进行测试话,应该会报一个,缺少SQL server连接驱动的错误,我们跟着要求在Linux服务器上安装即可:
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
yum remove unixODBC-utf16 unixODBC-utf16-devel
ACCEPT_EULA=Y yum install msodbcsql17
sudo ACCEPT_EULA=Y yum install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
yum install unixODBC-devel
五、测试连接