Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg

PHP : Function Reference : ODBC Functions (Unified)

ODBC Functions (Unified)


In addition to normal ODBC support, the Unified ODBC functions in PHP allow you to access several databases that have borrowed the semantics of the ODBC API to implement their own API. Instead of maintaining multiple database drivers that were all nearly identical, these drivers have been unified into a single set of ODBC functions.

The following databases are supported by the Unified ODBC functions: » Adabas D, » IBM DB2, » iODBC, » Solid, and » Sybase SQL Anywhere.


With the exception of iODBC, there is no ODBC involved when connecting to the above databases. The functions that you use to speak natively to them just happen to share the same names and syntax as the ODBC functions. However, building PHP with iODBC support enables you to use any ODBC-compliant drivers with your PHP applications. More information on iODBC, is available at » with the alternative unixODBC available at »


To access any of the supported databases you need to have the required libraries installed.



Include Adabas D support. DIR is the Adabas base install directory, defaults to /usr/local.


Include SAP DB support. DIR is SAP DB base install directory, defaults to /usr/local.


Include Solid support. DIR is the Solid base install directory, defaults to /usr/local/solid.


Include IBM DB2 support. DIR is the DB2 base install directory, defaults to /home/db2inst1/sqllib.


Include Empress support. DIR is the Empress base install directory, defaults to $EMPRESSPATH. From PHP 4, this option only supports Empress Version 8.60 and above.


Include Empress Local Access support. DIR is the Empress base install directory, defaults to $EMPRESSPATH. From PHP 4, this option only supports Empress Version 8.60 and above.


Include Birdstep support. DIR is the Birdstep base install directory, defaults to /usr/local/birdstep.


Include a user defined ODBC support. The DIR is ODBC install base directory, which defaults to /usr/local. Make sure to define CUSTOM_ODBC_LIBS and have some odbc.h in your include dirs. E.g., you should define following for Sybase SQL Anywhere 5.5.00 on QNX, prior to run configure script: CPPFLAGS="-DODBC_QNX -DSQLANY_BUG" LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc".


Include iODBC support. DIR is the iODBC base install directory, defaults to /usr/local.


Include Easysoft OOB support. DIR is the OOB base install directory, defaults to /usr/local/easysoft/oob/client.


Include unixODBC support. DIR is the unixODBC base install directory, defaults to /usr/local.


Include OpenLink ODBC support. DIR is the OpenLink base install directory, defaults to /usr/local. This is the same as iODBC.


Include DBMaker support. DIR is the DBMaker base install directory, defaults to where the latest version of DBMaker is installed (such as /home/dbmaker/3.6).

To disable unified ODBC support in PHP 3 add --disable-unified-odbc to your configure line. Only applicable if iODBC, Adabas, Solid, Velocis or a custom ODBC interface is enabled.

The windows version of PHP has built in support for this extension. You do not need to load any additional extension in order to use these functions.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini.

Table 228. Unified ODBC Configuration Options

Name Default Changeable Changelog
odbc.default_db * NULL PHP_INI_ALL  
odbc.default_user * NULL PHP_INI_ALL  
odbc.default_pw * NULL PHP_INI_ALL  
odbc.allow_persistent "1" PHP_INI_SYSTEM  
odbc.check_persistent "1" PHP_INI_SYSTEM  
odbc.max_persistent "-1" PHP_INI_SYSTEM  
odbc.max_links "-1" PHP_INI_SYSTEM  
odbc.defaultlrl "4096" PHP_INI_ALL  
odbc.defaultbinmode "1" PHP_INI_ALL  


Entries marked with * are not implemented yet.

For further details and definitions of the PHP_INI_* constants, see the Appendix I, php.ini directives.

Here's a short explanation of the configuration directives.

odbc.default_db string

ODBC data source to use if none is specified in odbc_connect() or odbc_pconnect().

odbc.default_user string

User name to use if none is specified in odbc_connect() or odbc_pconnect().

odbc.default_pw string

Password to use if none is specified in odbc_connect() or odbc_pconnect().

odbc.allow_persistent boolean

Whether to allow persistent ODBC connections.

odbc.check_persistent boolean

Check that a connection is still valid before reuse.

odbc.max_persistent integer

The maximum number of persistent ODBC connections per process.

odbc.max_links integer

The maximum number of ODBC connections per process, including persistent connections.

odbc.defaultlrl integer

Handling of LONG fields. Specifies the number of bytes returned to variables.

When an integer is used, the value is measured in bytes. You may also use shorthand notation as described in this FAQ.

odbc.defaultbinmode integer

Handling of binary data.

Resource Types

This extension defines two resource types: an ODBC connection identifier and an ODBC result identifier.

Predefined Constants

The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime.

ODBC_TYPE (integer)
SQL_CUR_USE_ODBC (integer)
SQL_CHAR (integer)
SQL_VARCHAR (integer)
SQL_DECIMAL (integer)
SQL_NUMERIC (integer)
SQL_BIT (integer)
SQL_TINYINT (integer)
SQL_SMALLINT (integer)
SQL_INTEGER (integer)
SQL_BIGINT (integer)
SQL_REAL (integer)
SQL_FLOAT (integer)
SQL_DOUBLE (integer)
SQL_BINARY (integer)
SQL_DATE (integer)
SQL_TIME (integer)
SQL_TYPE_DATE (integer)
SQL_TYPE_TIME (integer)
SQL_BEST_ROWID (integer)
SQL_ROWVER (integer)
SQL_NO_NULLS (integer)
SQL_NULLABLE (integer)
SQL_INDEX_ALL (integer)
SQL_ENSURE (integer)
SQL_QUICK (integer)

Table of Contents

odbc_autocommit — Toggle autocommit behaviour
odbc_binmode — Handling of binary column data
odbc_close_all — Close all ODBC connections
odbc_close — Close an ODBC connection
odbc_columnprivileges — Returns a result identifier that can be used to fetch a list of columns and associated privileges
odbc_columns — Lists the column names in specified tables
odbc_commit — Commit an ODBC transaction
odbc_connect — Connect to a datasource
odbc_cursor — Get cursorname
odbc_data_source — Returns information about a current connection
odbc_do — Synonym for odbc_exec()
odbc_error — Get the last error code
odbc_errormsg — Get the last error message
odbc_exec — Prepare and execute a SQL statement
odbc_execute — Execute a prepared statement
odbc_fetch_array — Fetch a result row as an associative array
odbc_fetch_into — Fetch one result row into array
odbc_fetch_object — Fetch a result row as an object
odbc_fetch_row — Fetch a row
odbc_field_len — Get the length (precision) of a field
odbc_field_name — Get the columnname
odbc_field_num — Return column number
odbc_field_precision — Synonym for odbc_field_len()
odbc_field_scale — Get the scale of a field
odbc_field_type — Datatype of a field
odbc_foreignkeys — Returns a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table
odbc_free_result — Free resources associated with a result
odbc_gettypeinfo — Returns a result identifier containing information about data types supported by the data source
odbc_longreadlen — Handling of LONG columns
odbc_next_result — Checks if multiple results are available
odbc_num_fields — Number of columns in a result
odbc_num_rows — Number of rows in a result
odbc_pconnect — Open a persistent database connection
odbc_prepare — Prepares a statement for execution
odbc_primarykeys — Returns a result identifier that can be used to fetch the column names that comprise the primary key for a table
odbc_procedurecolumns — Retrieve information about parameters to procedures
odbc_procedures — Get the list of procedures stored in a specific data source
odbc_result_all — Print result as HTML table
odbc_result — Get result data
odbc_rollback — Rollback a transaction
odbc_setoption — Adjust ODBC settings
odbc_specialcolumns — Returns either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction
odbc_statistics — Retrieve statistics about a table
odbc_tableprivileges — Lists tables and the privileges associated with each table
odbc_tables — Get the list of table names stored in a specific data source

Code Examples / Notes » ref.uodbc


Windows 64 Caveats with ODBC
I'm pretty sure PHP only accesses the 32-bit ODBC stuff on Windows 64.  Therefore, you will need to configure your ODBC DSNs via the Data Source Administrator found at:


On my search for a function to retriew the NewID of an inserted row wich has an autoincrement I found this solution like the mysql_insert_id for an ODBC connection to MS-Access :
// make your connection below
$Connection = odbc_connect(...);
$Result = odbc_exec($Connection, "select @@identity");
$NewID = odbc_result($Result, 1);
// make here all what you want with the NewID
In my mind this should also work with MS-SQL-Server and with Sybase - via ODBC and direct (mssql_.../sybase_...).
HTH ...


In response to Holger's comment about using @@identity:
Be carefull. If the table you're inserting into has a trigger that also inserts into another table that has an identity column you'll get the key of that other table! use scope_identity() instead of @@identity


If you receive an error stating "Connection is busy with results for another hstmt, SQL state S1000 in SQLExecDirect" try opening your odbc connection using the SQL_CURSOR_FORWARD_ONLY option
$db_link = odbc_connect($dsn, $username, $password, SQL_CURSOR_FORWARD_ONLY)
or die('Error connecting to server. Server says: '.htmlspecialchars(odbc_errormsg()));


If the bundled ODBC library stumbles on some field formats (like some REAL from Pervasive.SQL), have a look at
After many headaches, I have adoped odbtp: it's a very solid library and best of all it's not tied to a particular OS.

05-may-2005 04:14

I searched for the solution of why odbc connection of a network remote drive under Windows + Apache 2.0.X, cannot give the query, but seems no one provides the solution.
In fact, it is very simple.
Go to Control Panal -> Services;
Find and double click "Apache2";
In the page of "Log On", choose Log on as "This account" and give an account in the web server system which have the right to control the network remote drive;
Finally, restart Apache, and that's it.

11-oct-2006 03:28

I had big performance problems retrieving data form MS SQL Server with odbc only when the query was unsing a join.
I found out, that I had to connect with the cursor-type "SQL_CUR_USE_ODBC" and everything was ok:
$conn = odbc_connect("ShopLive", 'shop', 'xxx', SQL_CUR_USE_ODBC);


I found this to be a perfect alternative to the MaxDB special drivers of version 7.5.00. Just weren't that easy to install on *nix. Windows seems fine. Anyway The ODBC is a perfect alternative for connecting the SAPDB/MaxDB towards PHP.
Installation guide for the odbc alternative (instead of the MAXDB-php driver) can be found here:


Ever wonder why you're experiencing really slow data retrieval times using IBM DB2 Universal Database for Linux, UNIX, and Windows? The default cursor type used by Unified ODBC is not supported by DB2, so it gets downgraded to a forward-only cursor -- and that negotiation occurs with every row fetch.
One way to force your PHP applications to use forward-only cursors is to modify your DB2 client configuration with a handy CLI patch2 setting value of 6:
You have to update this client setting on the same machine on which you are running the PHP application. This works on Windows operating systems as well as on Linux & UNIX operating systems.
I ran a few basic benchmarks (fetch 10,000 rows consisting of 3 INTEGER columns from a remote database server) and concluded that this setting can make a major difference to your application speed:
Without CLI patch2 setting: ~22 seconds
With CLI patch2 setting: ~ 1.75 seconds
Note that the drawback of using this patch setting (or any other method of using forward-only cursors) makes odbc_num_rows() always return "-1" for the number of rows affected by a SELECT statement.

b dot parish

Accessing a Microsoft SQL Server database from PHP running under Linux:


A good tutorial for odbc + php can be found here (written by the good folks at IBM Developer Works):

Change Language

Follow Navioo On Twitter
.NET Functions
Apache-specific Functions
Alternative PHP Cache
Advanced PHP debugger
Array Functions
Aspell functions [deprecated]
BBCode Functions
BCMath Arbitrary Precision Mathematics Functions
PHP bytecode Compiler
Bzip2 Compression Functions
Calendar Functions
CCVS API Functions [deprecated]
Class/Object Functions
Classkit Functions
ClibPDF Functions [deprecated]
COM and .Net (Windows)
Crack Functions
Character Type Functions
Cybercash Payment Functions
Credit Mutuel CyberMUT functions
Cyrus IMAP administration Functions
Date and Time Functions
DB++ Functions
Database (dbm-style) Abstraction Layer Functions
dBase Functions
DBM Functions [deprecated]
dbx Functions
Direct IO Functions
Directory Functions
DOM Functions
DOM XML Functions
enchant Functions
Error Handling and Logging Functions
Exif Functions
Expect Functions
File Alteration Monitor Functions
Forms Data Format Functions
Fileinfo Functions
filePro Functions
Filesystem Functions
Filter Functions
Firebird/InterBase Functions
Firebird/Interbase Functions (PDO_FIREBIRD)
FriBiDi Functions
FrontBase Functions
FTP Functions
Function Handling Functions
GeoIP Functions
Gettext Functions
GMP Functions
gnupg Functions
Haru PDF Functions
hash Functions
Hyperwave Functions
Hyperwave API Functions
i18n Functions
IBM Functions (PDO_IBM)
iconv Functions
ID3 Functions
IIS Administration Functions
Image Functions
Imagick Image Library
Informix Functions
Informix Functions (PDO_INFORMIX)
Ingres II Functions
IRC Gateway Functions
PHP / Java Integration
JSON Functions
LDAP Functions
libxml Functions
Lotus Notes Functions
LZF Functions
Mail Functions
Mailparse Functions
Mathematical Functions
MaxDB PHP Extension
MCAL Functions
Mcrypt Encryption Functions
MCVE (Monetra) Payment Functions
Memcache Functions
Mhash Functions
Mimetype Functions
Ming functions for Flash
Miscellaneous Functions
mnoGoSearch Functions
Microsoft SQL Server Functions
Microsoft SQL Server and Sybase Functions (PDO_DBLIB)
Mohawk Software Session Handler Functions
mSQL Functions
Multibyte String Functions
muscat Functions
MySQL Functions
MySQL Functions (PDO_MYSQL)
MySQL Improved Extension
Ncurses Terminal Screen Control Functions
Network Functions
Newt Functions
NSAPI-specific Functions
Object Aggregation/Composition Functions
Object property and method call overloading
Oracle Functions
ODBC Functions (Unified)
ODBC and DB2 Functions (PDO_ODBC)
OpenAL Audio Bindings
OpenSSL Functions
Oracle Functions [deprecated]
Oracle Functions (PDO_OCI)
Output Control Functions
Ovrimos SQL Functions
Paradox File Access
Parsekit Functions
Process Control Functions
Regular Expression Functions (Perl-Compatible)
PDF Functions
PDO Functions
Phar archive stream and classes
PHP Options&Information
POSIX Functions
Regular Expression Functions (POSIX Extended)
PostgreSQL Functions
PostgreSQL Functions (PDO_PGSQL)
Printer Functions
Program Execution Functions
PostScript document creation
Pspell Functions
qtdom Functions
Rar Functions
GNU Readline
GNU Recode Functions
RPM Header Reading Functions
runkit Functions
SAM - Simple Asynchronous Messaging
Satellite CORBA client extension [deprecated]
SCA Functions
SDO Functions
SDO XML Data Access Service Functions
SDO Relational Data Access Service Functions
SESAM Database Functions
PostgreSQL Session Save Handler
Session Handling Functions
Shared Memory Functions
SimpleXML functions
SNMP Functions
SOAP Functions
Socket Functions
Standard PHP Library (SPL) Functions
SQLite Functions
SQLite Functions (PDO_SQLITE)
Secure Shell2 Functions
Statistics Functions
Stream Functions
String Functions
Subversion Functions
Shockwave Flash Functions
Swish Functions
Sybase Functions
TCP Wrappers Functions
Tidy Functions
Tokenizer Functions
Unicode Functions
URL Functions
Variable Handling Functions
Verisign Payflow Pro Functions
vpopmail Functions
W32api Functions
WDDX Functions
win32ps Functions
win32service Functions
xattr Functions
xdiff Functions
XML Parser Functions
XML-RPC Functions
XMLReader functions
XMLWriter Functions
XSL functions
XSLT Functions
YAZ Functions
YP/NIS Functions
Zip File Functions
Zlib Compression Functions
eXTReMe Tracker