FreeTDS error in PHP: remote procedure input (RPC) tabular data stream (TDS) protocol stream is invalid

I need to connect to the MSSQL server from Arch Linux using ODBC. I use FreeTDS, and with isql, it works:

isql sqlexpress dev dev

But not in PHP. I use PHP interactively:


PHP > $conn = odbc_connect("sqlexpress", 'dev', 'Dev'); PHP > $a=odbc_exec($conn, 'SELECT * FROM measures;'); PHP Warning: odbc_exec(): SQL error: [FreeTDS][SQL Server]The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 1 (""): Data type 0x00 is unknown., SQL state 37000 in SQLExecDirect in php shell code on line 1 Warning: odbc_exec(): SQL error: [FreeTDS][SQL Server]The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 1 (""): Data type 0x00 is unknown., SQL state 37000 in SQLExecDirect in php shell code on line 1 

I searched a lot, but I can not find a solution (or even someone with the same problem). My configuration files:

file / etc / odbc.ini:

 [sqlexpress] Server = 192.168.10.39 Port = 1433 Driver = FreeTDS Database = capture UserName = dev Password = Dev 

/etc/odbcinst.ini:

 [FreeTDS] Description = FreeTDS driver Driver = /usr/lib/libtdsodbc.so Setup = /usr/lib/libtdsS.so Trace = Yes TraceFile = /tmp/freetds.log FileUsage = 1 UsageCount = 1 

Have a nice day! Mate

+4
source share
1 answer

Here are my working configuration files for connecting to the MSSQL database from Ubuntu:

file / etc / odbc.ini

 # Define a connection to the MSSQL 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 [ebe] Description = MSSQL Server Driver = freetds Database = my_database ServerName = my_server_name TDS_Version = 8.0 

/etc/odbcinst.ini

 # Define where to find the driver for the Free TDS connections. [freetds] Description = MS SQL database access with Free TDS Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so UsageCount = 1 # Change the "no" to "yes" to enable ODBC logging. [ODBC] Trace = no TraceFile = /tmp/odbc.log 

/etc/freetds/freetds.conf

 [global] # If you get out-of-memory errors, it may mean that your client # is trying to allocate a huge buffer for a TEXT field. # Try setting 'text size' to a more reasonable limit text size = 64512 # Define a connection to the MSSQL server. [my_server_name] host = my_server_domain_or_ip port = 1433 tds version = 8.0 

And finally, here is my PHP connection string:

 $this->db_connection = new PDO("dblib:dbname=my_database;host=my_server_domain_or_ip", 'username', 'password'); 

I believe that setting tds to 8.0 could be a big help for you.

+2
source

All Articles