PHP: ODBC Functions (Unified) - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

odbc_autocommit ociwritetemporarylob

Last updated: Fri, 26 Jan 2007

view this page in

# CV. 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.

> Замечание: 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. The exception to this is iODBC. Building PHP with iODBC support enables you to use any ODBC-compliant drivers with your PHP applications. iODBC is maintained by OpenLink Software. More information on iODBC, as well as a HOWTO, is available at www.iodbc.org.

# Требования

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

# Установка

`--with-adabas[=DIR]`

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

`--with-sapdb[=DIR]`

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

`--with-solid[=DIR]`

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

`--with-ibm-db2[=DIR]`

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

`--with-empress[=DIR]`

  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.

`--with-empress-bcs[=DIR]`

  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.

`--with-birdstep[=DIR]`

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

`--with-custom-odbc[=DIR]`

  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".

`--with-iodbc[=DIR]`

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

`--with-esoob[=DIR]`

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

`--with-unixODBC[=DIR]`

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

`--with-openlink[=DIR]`

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

`--with-dbmaker[=DIR]`

  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.

Версия `PHP` для Windows имеет встроенную поддержку данного расширения. Это означает, что для использования данных функций не требуется загрузка никаких дополнительных расширений.

# Настройка во время выполнения

Поведение этих функций зависит от установок в `php.ini`.

Таблица 1. 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.

Для подробного описания констант PHP_INI_*, обратитесь к документации функции ini_set().

Краткое разъяснение конфигурационных директив.

`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.

  Если используется integer, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ.

`odbc.defaultbinmode` integer

  Handling of binary data.

# Типы ресурсов

Данное расширение не определяет никакие типы ресурсов.

# Предопределенные константы

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

`ODBC_TYPE` (integer)

`ODBC_BINMODE_PASSTHRU` (integer)

`ODBC_BINMODE_RETURN` (integer)

`ODBC_BINMODE_CONVERT` (integer)

`SQL_ODBC_CURSORS` (integer)

`SQL_CUR_USE_DRIVER` (integer)

`SQL_CUR_USE_IF_NEEDED` (integer)

`SQL_CUR_USE_ODBC` (integer)

`SQL_CONCURRENCY` (integer)

`SQL_CONCUR_READ_ONLY` (integer)

`SQL_CONCUR_LOCK` (integer)

`SQL_CONCUR_ROWVER` (integer)

`SQL_CONCUR_VALUES` (integer)

`SQL_CURSOR_TYPE` (integer)

`SQL_CURSOR_FORWARD_ONLY` (integer)

`SQL_CURSOR_KEYSET_DRIVEN` (integer)

`SQL_CURSOR_DYNAMIC` (integer)

`SQL_CURSOR_STATIC` (integer)

`SQL_KEYSET_SIZE` (integer)

`SQL_CHAR` (integer)

`SQL_VARCHAR` (integer)

`SQL_LONGVARCHAR` (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_VARBINARY` (integer)

`SQL_LONGVARBINARY` (integer)

`SQL_DATE` (integer)

`SQL_TIME` (integer)

`SQL_TIMESTAMP` (integer)

`SQL_TYPE_DATE` (integer)

`SQL_TYPE_TIME` (integer)

`SQL_TYPE_TIMESTAMP` (integer)

`SQL_BEST_ROWID` (integer)

`SQL_ROWVER` (integer)

`SQL_SCOPE_CURROW` (integer)

`SQL_SCOPE_TRANSACTION` (integer)

`SQL_SCOPE_SESSION` (integer)

`SQL_NO_NULLS` (integer)

`SQL_NULLABLE` (integer)

`SQL_INDEX_UNIQUE` (integer)

`SQL_INDEX_ALL` (integer)

`SQL_ENSURE` (integer)

`SQL_QUICK` (integer)

add a note User Contributed Notes
ODBC Functions (Unified)
11-Oct-2006 07: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);`
sven at ajaxtechforums dot com
27-Feb-2006 03:07
`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:
http://maxdb.yapabout.com/viewtopic.php?t=21`
xangelusx at hotmail dot com
11-Nov-2005 07:45
`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
<?php
$db_link = odbc_connect($dsn, $username, $password, SQL_CURSOR_FORWARD_ONLY)
or die('Error connecting to server. Server says: '.htmlspecialchars(odbc_errormsg()));
?>`
Quickdraw
05-May-2005 11:06
`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`
04-May-2005 08: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.`
philip
07-Mar-2005 03:13
`A good tutorial for odbc + php can be found here (written by the good folks at IBM Developer Works):
* http://tinyurl.com/3w8s4`
denials at gmail dot com
23-Jan-2005 03:05
`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:
$ db2 UPDATE CLI CONFIGURATION FOR SECTION dbname USING patch2 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.`
pascals at NOSPAM dot pobox dot com
27-Feb-2004 03:15
`If the bundled ODBC library stumbles on some field formats (like some REAL from Pervasive.SQL), have a look at http://odbtp.sourceforge.net/.
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.`
vbwebprofi at gmx dot de
04-Nov-2003 04:31
`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);
odbc_free_result($Result);
// make here all what you want with the NewID
odbc_close($Connection);
?>
In my mind this should also work with MS-SQL-Server and with Sybase - via ODBC and direct (mssql_.../sybase_...).
HTH ...
Regards
Holger`
b dot parish at no_spam dot linst dot ac dot uk
14-Aug-2002 08:46
`Accessing a Microsoft SQL Server database from PHP running under Linux:
http://www.phpbuilder.com/columns/alberto20000919.php3?page=4`
dan dot polansky at seznam dot cz
02-Mar-2001 10:37
`First I just repeat that examples are here:
http://php.weblogs.com/odbc
Second: Despite confusing remarks above, using unified ODBC functions you can really connect to any database for which you create DSN (Data Source Name). That is: using unified ODBC functions you can connect to _any_ database for which you have ODBC driver. Drivers exists or example Interbase, VisualFoxPro, DBase III,IV,V etc, many drivers are part of Win98 installation, other can be obtained from companies like EasySoft and Merant. ODBC is one of the most flexible ways for connecting to databases. This is because ODBC driver exist for almost every database there is. The question is, whether the driver is free. At least there are many 30 days trial versions of drivers.`
add a note
odbc_autocommit ociwritetemporarylob

Last updated: Fri, 26 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 11:33:19 2007 PST