update page now
PHP 8.5.2 Released!

odbc_connect

(PHP 4, PHP 5, PHP 7, PHP 8)

odbc_connectVerbindet mit einer Datenquelle

Beschreibung

odbc_connect(
    string $dsn,
    ?string $user = null,
    ?string $password = null,
    int $cursor_option = SQL_CUR_USE_DRIVER
): Odbc\Connection|false

Die Verbindungskennung, die von dieser Funktion zurückgegeben wird, wird von anderen ODBC-Funktionen benötigt. Es können mehrere Verbindungen nebeneinander bestehen, solange sie entweder unterschiedliche Datenbanken oder unterschiedliche Anmeldeinformation verwenden.

Bei einigen ODBC-Treibern können möglicherweise Probleme bei der Ausführung von komplexen Prozeduren auftreten. Die Fehlermeldung lautet dann etwa "Cannot open a cursor on a stored procedure that has anything other than a single select statement in it". Die Verwendung von SQL_CUR_USE_ODBC kann diesen Fehler verhindern. Weiterhin unterstützen einige ODBC-Treiber den optionalen Parameter row_number der Funktion odbc_fetch_row() nicht. Auch in diesem Fall kann SQL_CUR_USE_ODBC helfen.

Parameter-Liste

dsn

Der Datenquellenname für die Verbindung. Alternativ kann auch eine DSN-lose Verbindungszeichenkette verwendet werden.

user

Der Benutzername. Dieser Parameter wird ignoriert, wenn dsn uid enthält. Um eine Verbindung herzustellen, ohne den Parameter user anzugeben, muss null verwendet werden.

password

Das Passwort. Dieser Parameter wird ignoriert, wenn dsn pwd enthält. Um eine Verbindung herzustellen, ohne den Parameter password anzugeben, muss null verwendet werden.

cursor_option

Dies setzt die Art des Cursors, der für diese Verbindung genutzt werden soll. Normalerweise wird er nicht benötigt, kann aber bei manchen ODBC-Treiberproblemen nützlich sein.

Folgende Konstanten sind als Cursortyp definiert:

  • SQL_CUR_USE_IF_NEEDED
  • SQL_CUR_USE_ODBC
  • SQL_CUR_USE_DRIVER

Rückgabewerte

Gibt eine ODBC-Verbindung zurück. Bei einem Fehler wird false zurückgegeben..

Changelog

Version Beschreibung
8.4.0 odbc erwartet nun eine Instanz von Odbc\Connection; vorher wurde eine Ressource erwartet.
8.4.0 Diese Funktion gibt nun eine Instanz von Odbc\Connection zurück; vorher wurde eine Ressource zurückgegeben.
8.4.0 user und password sind nun nullable (akzeptieren den null-Wert); sie sind nun auch optional und standardmäßig auf null gesetzt.
8.4.0 Bisher wurde bei der Verwendung einer leeren Zeichenkette für password pwd nicht in die generierte Verbindungszeichenkette für dsn aufgenommen. Jetzt wird ein pwd mit einer leeren Zeichenkette als Wert erzeugt. Um das vorherige Verhalten wiederherzustellen, kann password nun auf null gesetzt werden.
8.4.0 Wenn dsn uid oder pwd enthielt, wurden bisher die Parameter user und password ignoriert. Jetzt wird user nur ignoriert, wenn dsn uid enthält, und password wird nur ignoriert, wenn dsn pwd enthält.

Beispiele

Beispiel #1 DSN-lose Verbindung

<?php
// Microsoft SQL Server unter Verwendung des SQL Native Client 10.0 ODBC-Treibers - ermöglicht Verbindungen zu SQL 7, 2000, 2005 und 2008
$connection = odbc_connect("Driver={SQL Server Native Client 10.0};Server=$server;Database=$database;", $user, $password);

// Microsoft Access
$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename", $user, $password);

// Microsoft Excel
$excelFile = realpath('C:/ExcelData.xls');
$excelDir = dirname($excelFile);
$connection = odbc_connect("Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=$excelFile;DefaultDir=$excelDir" , '', '');
?>

Siehe auch

  • Für persistente Verbindungen: odbc_pconnect() - Öffnet eine persistente Datenbankverbindung

add a note

User Contributed Notes 3 notes

up
20
fr at freedom2ct dot com
6 years ago
Under Windows odbc_connect (and PDO ODBC) apparently uses the Windows locale to handle input and output from e.g. MS access and MS SQL Server databases.

This causes lots of headaches if one is using other than ASCII characters.

Work-round solutions like utf8_encode and mb_convert both fails.

The solution I fund working is to perform the following changes to Windows

Control Panel > Region > Administrative > Change system locale
>Check '<i>Use Unicode UTF-8 for worldwide language support.</i>'
up
6
nunya at damn dot biz
5 years ago
One additional note regarding odbc_pconnect  and possibly other variations of pconnect:

If the connection encounters an error (bad SQL, incorrect request, etc), that error will return with  be present in odbc_errormsg for every subsequent action on that connection, even if subsequent actions don't cause another error.

For example:

A script connects with odbc_pconnect.
The connection is created on it's first use.
The script calls a query "Select * FROM Table1".
Table1 doesn't exist and odbc_errormsg contains that error.

Later(days, perhaps), a different script is called using the same parameters to odbc_pconnect.
The connection already exists, so it is reused.
The script calls a query "Select * FROM Table0".
The query runs fine, but odbc_errormsg still returns the error about Table1 not existing.

I'm not seeing a way to clear that error using odbc_ functions, so keep your eyes open for this gotcha or use odbc_connect instead.
up
3
lffranco at dco.pemex.com
22 years ago
As always Microsoft is clueless... I've been trying to connect to an Access database on a W2K on the network (not a local file, but mapped on the V: drive), via ODBC.

All I got is this message:
Warning: SQL error: [Microsoft][ODBC Microsoft Access Driver] '(unknown)' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides., SQL state S1009 in SQLConnect in d:\apache\cm\creaart.php on line 13

So... I started looking al around and looks like the ODBC driver has some severe problems:

1. It cannot access a Access database via a mapped drive. And this is for ANY application, name it PHP, Coldfusion, whatever
2. You cannot make a system DSN with a UNC (\\Server\resource), so you must map the drive

Cute isn't it?

So... I quit on ODBC and went via ADO, this is the code that works:

=== CODE ===

$db = '\\\\server\\resource\\db.mdb';
$conn = new COM('ADODB.Connection');
$conn->Open("DRIVER={Driver do Microsoft Access (*.mdb)}; DBQ=$db");

// Driver do Microsoft Access (*.mdb)
// must be the name in your odbc drivers, the one you get
// from the Data Sources (ODBC).
// In this case, I'm in Mexico but the driver name is in portuguese, thanks Microsoft.

$sql = 'SELECT username FROM tblUsuarios';
$res = $conn->Execute($sql);
while (!$res->EOF)
{
    print $res->Fields['username']->Value . "<br>";
    $res->MoveNext();
}

$res->Close(); 
$conn->Close(); 
$res = null; 
$conn = null;

=== /CODE ===
To Top