当我执行此代码时:
print_r(PDO::getAvailableDrivers());
Run Code Online (Sandbox Code Playgroud)
它说我有odbc司机可用.
Array ( [0] => mysql [1] => odbc [2] => sqlite )
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用它时:
$handle = new PDO("odbc:Server=dbServerIpAddress,myportnumber;Database=mydatabase", "myusername", 'mypassword');
Run Code Online (Sandbox Code Playgroud)
它没有做任何事情 - 没有错误,根本不起作用.它甚至不会执行该行!
如何通过PDO和ODBC将PHP连接到此MSSQL数据库?
我正在尝试连接到我的主机上的数据库(windows xp,sql server 05).我的客户机是Ubuntu 10.04.我可以使用tsql连接和执行命令,但是isql失败.以下是我的配置文件和错误消息.
freetds.conf
text size = 64512
[SQLEXPRESS]
host = 192.168.163.1
port = 1433
tds version = 7.0
Run Code Online (Sandbox Code Playgroud)
ODBCINST.INI
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1
Run Code Online (Sandbox Code Playgroud)
ODBC.INI
[SQLEXPRESS]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = 192.168.163.1
Database = SCOPE_Peel
Port = 1433
UID = sa
PWD = test1234
ReadOnly = No
Run Code Online (Sandbox Code Playgroud)
TSQL:
tsql -S SQLEXPRESS -U sa …Run Code Online (Sandbox Code Playgroud) 概括
我正在尝试使用准备好的语句来停止 SQL 注入,但我无法找到保证它正常工作所需的支持。
设想
我在 Linux 上托管一个站点,该站点连接到带有 FreeTDS 0.91 版的 Microsoft SQL Server,特别是使用 FreeTDS 的dblib. 我已将tds数据库连接的版本设置为 7.4,并且正在使用 PHP 的PDO对象。
根据FreeTDS 文档,4.2 不支持准备好的语句:
TDS 4.2 有限制
- 当然,只有ASCII。
- 不支持 RPC。
- 不支持 BCP。
- varchar 字段限制为 255 个字符。如果您的表定义了更长的字段,它们将被截断。
- 不支持动态查询(也称为准备语句)。
然而,没有任何迹象表明 7.4 不支持准备好的语句,这给了我合理的信心,它们至少不会引发驱动程序错误。
PHP 的 PDO 支持通过PDO::setAttribute(). 我有兴趣PDO::ATTR_ERRMODE将所有错误设置为异常,并PDO::ATTR_EMULATE_PREPARES在兼容时强制数据库执行准备好的语句。
问题
测试连接时,我收到以下错误:
数据库错误:SQLSTATE[IM001]:驱动程序不支持此功能:驱动程序不支持设置属性
无法设置PDO::ATTR_EMULATE_PREPARES,我无法保证数据库实际上按预期执行准备好的语句。
无论如何要修改我的方法,或者是否有替代方法来保证准备好的语句在来自 Linux 的 MS SQL Server 上安全地执行?
我在 Mac OS X Mavericks 上,并尝试使用 pyodbc 连接到 Microsoft Azure MS SQL 服务器。为了简单起见,我想使用无 DSN 的连接,并使用 MacPorts 安装了 FreeTDS 和 pyodbc (因为这就是我最终想要使用的)。
1.tsql配置
$ tsql -C
Compile-time settings (established with the "configure" script)
Version: freetds v0.91.103
freetds.conf directory: /opt/local/etc/freetds
MS db-lib source compatibility: no
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 5.0
iODBC: no
unixodbc: no
SSPI "trusted" logins: no
Kerberos: no
Run Code Online (Sandbox Code Playgroud)
2.odbc.ini(/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/databases/MyODBC/files/odbc.ini)
[MSSQL]
Description = MyDatabase
Driver = FreeTDS
Servername = xxxxxxx.database.windows.net
UID = …Run Code Online (Sandbox Code Playgroud)