作者ri3567 (阿小)
看板PHP
标题Re: [请益] 如何在Debian使用php存取sqlserver[8/14edit]
时间Sun Aug 19 10:09:28 2018
原文恕删 我有尝试灌了 debian 8 的 VM 并实作出所有功能
以下是我做的努力 分享看看
环境:
debian 8 with debian gnome desktop and ssh server
wget 1.16
php 7.2
sql server : 在另一台电脑用 docker microsoft/mssql-server-linux
为 sql server 2017 版本
针对一些关键环节:
(1)
: 在执行这一行的时候遇到问题
: wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
: 系统回复
: wget: not an http or ftp url: https://packages.sury.org/php/apt.gpg
我使用 wget 时看了一下版本为 1.16 比原po 推文说明的 1.18 版本要旧
推测 wget https 失败是因为少灌了凭证的套件 ca-certificates
参考这篇:
http://tinyurl.com/yc4u3uuu
(2) php 灌 sql server 驱动 sqlsrv
使用 php-pear 的 pecl 安装,需要相依套件为 php-pear php7.2-dev unixodbc-dev
这里最重要的是找到合适的套件库
原po使用的
https://packages.sury.org/php/ 已足够
同时参考原po 推文中的连结安装
http://tinyurl.com/yce2xf5r
(3) 安装 ms 的 odbc driver
参考
http://tinyurl.com/yan5dnyx
使用微软提供的套件库
https://packages.microsoft.com/config/debian/8/prod.list
在 linux debian 8 安装 msodbcsql17
(4) php 程式使用 PDO
注意 dns 即可,附上官网说明
http://php.net/manual/ru/ref.pdo-sqlsrv.connection.php
操作步骤:
sudo apt-get install curl apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg \
https://packages.sury.org/php/apt.gpg
sudo echo "deb
https://packages.sury.org/php/ $(lsb_release -sc) main" | \
sudo tee /etc/apt/sources.list.d/php.list
sudo apt-get update
sudo apt-get install php-pear php7.2 php7.2-dev
sudo apt-get install unixodbc-dev
sudo pecl install sqlsrv pdo_sqlsrv
若权限不够 直接开vim 写入就好或是使用root
sudo su
echo -e "; priority=20\nextension=pdo_sqlsrv.so" > \
/etc/php/7.2/mods-available/pdo_sqlsrv.ini
echo -e "; priority=20\nextension=sqlsrv.so" > \
/etc/php/7.2/mods-available/sqlsrv.ini
exit
sudo phpenmod sqlsrv pdo_sqlsrv
sudo su
curl
https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl
https://packages.microsoft.com/config/debian/8/prod.list > \
/etc/apt/sources.list.d/mssql-release.list
exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
之後再使用
php -m 或是 <?php phpinfo();?>
验证使否有安装成功就好,有出现 sqlsrv、pdo_sqlsrv 就ok
连线测试程式
<?php
try
{
$username = 'SA';
$password = '<your_sa_password>';
$dsn = "sqlsrv:Server=ip,1433;Database=testdb";
$pdo = new PDO($dsn, $username, $password);
foreach($pdo->query('select @@version') as $result) {
var_dump($result);
}
$pdo = null;
} catch (PDOException $e) {
echo $e->getMessage();
}
结果:
https://imgur.com/LVUBJJp
-------------------------------------------------------------
後记:
同样的站台之前有在 centOS 上完成安装,步骤差异很多却简单不少
因为我使用remi软体库 而这只有在 rpm 的体系才有支持
架站灌软体回到原点最痛苦的就是 : 相依套件与软体灌不完全的问题
微软如果没有提供可以在linux上跑的driver与软体库,真的没辙
而这案例有提供相关的软体库与套件,多方比对官方网站跟google的讯息
加上自己的经验完成的,我不认为在linux 上跑 MS 的东西是爆坑
只是有没有可靠的套件库与 MS 的 sql server目前对linux支持到什麽程度而已
我不会在正式环境或是专案用linux 跑 sql server
但是使用linux 架站 php 装上sql server 的驱动是我觉得值得尝试的功能
非常有趣也讨论看看
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.168.168.11
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1534644573.A.1C1.html
1F:推 hiigara: 推一个 08/19 10:24
※ 编辑: ri3567 (118.168.168.11), 08/19/2018 10:29:03
2F:推 shadowjohn: 嗯,只有会跟不会这二件事,哪来的爆坑XD 08/20 08:55
3F:推 pttrAin: 其实就後来修文讲的…sqlsrv没有32位元版本 '_` 08/22 23:35
4F:→ pttrAin: 我模糊的记忆中似乎有看到讨论能不能把64位元的sqlsrv 08/22 23:36
5F:→ pttrAin: 装到32位元的debian,但暂时没时间去尝试就是 orz 08/22 23:37
6F:→ pttrAin: 然後我用的方法有遇到一个问题,读不到型别为char的中文字 08/22 23:38
7F:→ pttrAin: 坑爆就是找不到资料可以照着做就搞定 08/22 23:39
8F:→ pttrAin: 当然我对linux熟悉度不够也是问题就是 '_>` 08/22 23:40
9F:推 pttrAin: mosquitto with websocket跟php连sqlserver这两件事情 08/22 23:43
10F:→ pttrAin: 我参考的页面至少五十个以上,综合其中一些做法才成功 08/22 23:43
11F:→ pttrAin: 不过我是有硬体韧体的限制,不然坑可能也不会这麽大 ~_~ 08/22 23:45
12F:→ pttrAin: ca-certificates <- 有装过,在我的case是没效 08/22 23:46