Connect PHP to MSSQL via PDO ODBC
2022-04-23 15:26:00 【allway2】
You need to set up several profiles .
/etc/freetds/freetds.conf（ These positions are right Ubuntu 12.04 It works , And probably for most *nixes That's right. ）.
You need to install
freetds（ Not sure CentOS What is the name of the package on ）. stay Ubuntu in , This will be
apt-get install unixodbc tdsodbc.
Help on installing these , Please check this question Can't Install FreeTDS via Yum Package Manager
/etc/odbc.ini（ This file may be empty ）
# Define a connection to a Microsoft SQL server # The Description can be whatever we want it to be. # The Driver value must match what we have defined in /etc/odbcinst.ini # The Database name must be the name of the database this connection will connect to. # The ServerName is the name we defined in /etc/freetds/freetds.conf # The TDS_Version should match what we defined in /etc/freetds/freetds.conf [mssql] Description = MSSQL Server Driver = freetds Database = XXXXXX ServerName = MSSQL TDS_Version = 7.1
# Define where to find the driver for the Free TDS connections. # Make sure you use the right driver (32-bit or 64-bit). [freetds] Description = MS SQL database access with Free TDS Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so #Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so UsageCount = 1
/etc/freetds/freetds.conf（ Or you can go to /etc/freetds.conf Find it ）
# The basics for defining a DSN (Data Source Name) # [data_source_name] # host = <hostname or IP address> # port = <port number to connect to - probably 1433> # tds version = <TDS version to use - probably 8.0> # Define a connection to the Microsoft SQL Server [mssql] host = XXXXXX port = 1433 tds version = 7.1
You may need
tds version = 7.1 According to your MSSQL Version change the line above .
After making these changes , You must restart apache.
In your PHP In the code , You will create... Like this PDO object ：
$pdo = new PDO("dblib:host=mssql;dbname=$dbname", "$dbuser","$dbpwd");
Please note that , Your user name may need to be in the following format ：
Besides , If you execute and search in the page “freetds”, You will know that it works ,
phpinfo() This will display a mssql part , among freetds List as library version .
The accepted answer is in the actual PHP Is correct in the call . As someone rightly commented , It should call odbc The driver . secondly , It has not been used in odbc.ini The name of the data source configured in (DSN), But it's actually creating a ad-hoc DSN. Instead, ：
$pdo = new PDO("odbc:mssql", "$dbuser","$dbpwd");
among mssql refer to odbc.ini Medium DSN object
You can create ad-hoc DSN：
$pd = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName, $dbuser, $dbpass);
among mssql Now I mean freetds.conf Server object in , and FreeTDS refer to odbcinst.ini Driver object in
（ This should really be a comment , But I don't represent ）.
If you want to use FreeTDS The driver directly sets pdo odbc Connect To MS SQL The server , Without having to be in the configuration file freetds.conf It is specified in .
$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;PORT=$portNo;DATABASE=$dbName"; $conn = new PDO($connection_string, $dbUser, $dbPass);
If you have a named instance MSSQL The server , You can delete the port number , And then to server_ip\instance_name Format modification $serverName for example ：“192.168.1.1\sqlexpress”, among sqlexpress Is the instance name .
$connection_string = "odbc:DRIVER=FreeTDS;SERVER=$serverName;DATABASE=$dbName"; $conn = new PDO($connection_string, $dbUser, $dbPass);
Please note that odbcinst.ini Configure driver location in
[FreeTDS] Description = TDS driver (Sybase/MS SQL) Driver = libtdsodbc.so Setup = libtdsS.so
- Basic operation of sequential stack
- On the day of entry, I cried (mushroom street was laid off and fought for seven months to win the offer)
- Do keyword search, duplicate keyword search, or do not match
- HJ31 单词倒排
- Redis cluster principle
- Detailed explanation of MySQL connection query
- asp. Net method of sending mail using mailmessage
- 我的 Raspberry Pi Zero 2W 折腾笔记，记录一些遇到的问题和解决办法
- 如果conda找不到想要安装的库怎么办PackagesNotFoundError: The following packages are not available from current
Mysql database explanation (10)
How to design a good API interface?
Detailed explanation of kubernetes (IX) -- actual combat of creating pod with resource allocation list
How to use OCR in 5 minutes
Detailed explanation of C language knowledge points -- first understanding of C language  - vs2022 debugging skills and code practice 
Differential privacy (background)
The win10 taskbar notification area icon is missing
JUC learning record (2022.4.22)
8.5 concise implementation of cyclic neural network
Tun equipment principle
Five data types of redis
On the day of entry, I cried (mushroom street was laid off and fought for seven months to win the offer)
MultiTimer v2 重构版本 | 一款可无限扩展的软件定时器
What is the role of the full connection layer?
Sword finger offer (2) -- for Huawei
Llvm - generate if else and pH
Error: unable to find remote key "17f718f726"“
Educational Codeforces Round 127 A-E题解
Introduction to dirty reading, unrepeatable reading and phantom reading
Openfaas practice 4: template operation
Common interview questions of operating system:
Reptile exercises (1)
Explanation of redis database (III) redis data type