ubantu配置php连接sql

注:本文操作by大佬https://www.jianshu.com/u/872d5442bf70
本人仅负责整理www
在配置过程中主要流程如下:

MAIN

主要配置过程为两个部分:

  1. 安装微软为Linux系统准备的SQL ServerODBC driver,以配置php连接sql的编程接口。

    • ubantu安装ODBC驱动

      sudo su
      curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
      
      #Download appropriate package for the OS version
      #Choose only ONE of the following, corresponding to your OS version
      
      #Ubuntu 16.04
      curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
      #Ubuntu 18.04
      curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
      #Ubuntu 20.04
      curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
      #Ubuntu 21.04
      curl https://packages.microsoft.com/config/ubuntu/21.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      #根据版本选择自己需要的curl命令执行
      exit
      sudo apt-get update
      sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17
      # optional: for bcp and sqlcmd(是否装配sql的其他命令工具)
      sudo ACCEPT_EULA=Y apt-get install -y mssql-tools
      echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
      # 配置了shell的bashrc文件
      source ~/.bashrc
      # 使环境变量生效
      # optional: for unixODBC development headers
      sudo apt-get install -y unixodbc-dev
      

    参考文献:微软官方文档[^1]

  2. 下载php连接数据库的配置,使php可通过sqlsrv访问数据库。

    文档较为详尽地说明了如何安装phpapache并且为php安装sqlsrv扩展。

    • php安装

      sudo su
      add-apt-repository ppa:ondrej/php -y
      # 修改下载源为ppa源,默认配置yes
      apt-get update
      # apt update相应软件
      apt-get install php8.0 php8.0-dev php8.0-xml -y --allow-unauthenticated   
      #安装php8.0,php8.0-dev与配置文件,默认yes,允许安装未通过验证的软件
      
    • 确认ODBC已经安装(见1),注意需要安装可选包unixodbc-dev,它可以通过pecl命令安装php-driver

    • 配置phpsqlsrv

      sudo pecl install sqlsrv
      #下载sqlsrv包
      sudo pecl install pdo_sqlsrv
      #下载pdo_sqlsrv包,用于php链接数据库
      sudo su
      printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.ini
      printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.ini
      #将需要配置的行写入配置文件
      exit
      sudo phpenmod -v 8.0 sqlsrv pdo_sqlsrv
      #开启服务
      
    • 配置apache

      sudo su
      apt-get install libapache2-mod-php8.0 apache2
      a2dismod mpm_event
      #关闭apache的该mod模块(处理多线程高负载)
      a2enmod mpm_prefork
      #启用apache的该mod模块(线程安全)
      a2enmod php8.0
      #启用apache的php模块
      exit
      
    • 重启apache

      sudo service apache2 restart
      

​ 参考文献:微软官方文档[^2]

  1. 对配置情况进行测试
    • 首先在apache对应文档var/www/html/下配置网页文档如简单的index.html,确保apache可以正常工作(该目录需要权限较高,也可通过修改配置文件将目录定位到普通目录中)。
    • 然后将php文件放入指定的网页目录下,观察php代码能否显示正常网页。
    • 最后通过sql_srv连接系统现有的数据库,通过指定语句打出数据库内表的内容,观察是能否正常访问、是否有乱码,均无问题说明配置成功。

Q&A

vscode配置问题

由于sql_srv扩展包无法默认被vscode识别,导致相关函数标红,无法出现代码高亮与自动补全,查阅相关链接后,可知进入SQL tool的设置@ext:bmewburn.vscode-intelephense-client中,在php的Intelephense: Stubs插件下加入sqlsrv and pdo_sqlsrv组件,vscode中便存在该拓展包。[^3]

指定uft-8编码

在后端数据库导入数据时,出现导入数据为中文乱码的情况,此处需要手动置顶编码为utf-8。[^4]

首先需要将字符类型指定为nvarchar以保证其支持中文,并通过 alter database dbname collate Chinese_PRC_CI_AS使其支持中文排序规则,即可成功。

处理php版本冲突

启动apache2的时候失败了,报错如下:

# systemctl status apache2.service 
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Wed 2020-03-11 23:17:35 WIB; 13s ago
  Process: 9151 ExecStart=/usr/sbin/apachectl start (code=exited, status=139)

Mar 11 23:17:35 xdn.id systemd[1]: Starting The Apache HTTP Server...
Mar 11 23:17:35 xdn.id apachectl[9151]: Segmentation fault
Mar 11 23:17:35 xdn.id apachectl[9151]: Action 'start' failed.
Mar 11 23:17:35 xdn.id apachectl[9151]: The Apache error log may have more information.
Mar 11 23:17:35 xdn.id systemd[1]: apache2.service: Control process exited, code=exited status=139
Mar 11 23:17:35 xdn.id systemd[1]: apache2.service: Failed with result 'exit-code'.
Mar 11 23:17:35 xdn.id systemd[1]: Failed to start The Apache HTTP Server.

查询错误代码139等可知,是php版本重复的问题,由于本机之前装配了php7.4版本且没有完全卸载干净而又按照微软要求安装了php 8.0,所以apache无法选择版本正常启动,需要手动关闭php模块。[^4]

sudo a2dismod php7.4

之后可以成功启动。

DOC

php sqlsrv的手册

Php sqlsrv部分函数与ODBC函数在使用方法等上存在差异,对此可查询php官网给出的操作手册[^6]。

参考文献

[1]https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017#ubuntu17

[2] https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15#testing-your-installation

[3] https://stackoverflow.com/questions/61498120/visual-studio-code-how-to-integrate-support-from-php-srv-driver

[4]https://www.cnblogs.com/sthinker/p/6025153.html

[5] https://stackoverflow.com/questions/60640440/apache2-service-control-process-exited-code-exited-status-139

[6] https://www.php.net/manual/en/book.sqlsrv.php

你可能感兴趣的:(连贯操作,sql,php,sqlserver)