PHP.mk документација

ODBC и DB2 PDO драјвер

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

ref.pdo-odbc.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека ref.pdo-odbc.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
ODBC и DB2 PDO драјвер

Референца за `ref.pdo-odbc.php` со подобрена типографија и навигација.

ref.pdo-odbc.php

ODBC и PDO драјвер за DB2 (PDO_ODBC)

Вовед

PDO_ODBC е драјвер кој го имплементира интерфејсот PHP Data Objects (PDO) за да овозможи пристап од PHP до бази на податоци преку ODBC драјвери или преку библиотеката IBM DB2 Call Level Interface (DB2 CLI). PDO_ODBC моментално поддржува три различни „вкусови“ на драјвери за бази на податоци:

ibm-db2

Поддржува пристап до сервери IBM DB2 Universal Database, Cloudscape и Apache Derby преку бесплатниот DB2 express-C клиент.

unixODBC

Поддржува пристап до сервери на бази на податоци преку unixODBC менаџерот за драјвери и сопствените ODBC драјвери на базата на податоци.

generic

Нуди опција за компајлирање за менаџери на ODBC драјвери кои не се експлицитно поддржани од PDO_ODBC.

На Windows, php_pdo_odbc.dll мора да се овозможи како екстензија во php.ini. Тој е поврзан со Windows ODBC Driver Manager за да може PHP да се поврзе со која било база на податоци каталогизирана како Системски DSN.

Инсталација

PDO_ODBC на UNIX системи
  1. PDO_ODBC е вклучен во PHP изворниот код. Можете да го компајлирате PDO_ODBC екстензијата како статички или споделен модул користејќи го следново configure commands.

    ibm_db2

    ./configure --with-pdo-odbc=ibm-db2,/opt/IBM/db2/V8.1/
    
    За да го изградите PDO_ODBC со ibm-db2 вкус, мора претходно да ги инсталирате DB2 заглавијата за развој на апликации на истата машина на која го компајлирате PDO_ODBC. DB2 заглавијата за развој на апликации се опција за инсталирање во DB2 серверите, а исто така се достапни како дел од DB2 клиентот за развој на апликации, слободно достапен за преземање од IBM developerWorks » веб-страница.

    Ако не наведете локација за DB2 библиотеки и заглавија до configure команда, PDO_ODBC стандардно користи /home/db2inst1/sqllib.

    unixODBC

    ./configure --with-pdo-odbc=unixODBC,/usr/local
    
    Ако не наведете локација за unixODBC библиотеки и заглавија до configure команда, PDO_ODBC стандардно користи /usr/local.
    generic
    ./configure --with-pdo-odbc=generic,/usr/local,libname,ldflags,cflags
    

Претходно дефинирани константи

Константите подолу се дефинирани од овој драјвер и ќе бидат достапни само кога екстензијата е компајлирана во PHP или динамички вчитана при извршување. Дополнително, овие константи специфични за драјверот треба да се користат само ако го користите овој драјвер. Користењето атрибути специфични за драјверот со друг драјвер може да резултира со неочекувано однесување. Добиј информации за MySQL хост Константите подолу се дефинирани од овој драјвер и ќе бидат достапни само кога екстензијата е или компајлирана во PHP или динамички вчитана во време на извршување. Покрај тоа, овие константи специфични за драјверот треба да се користат само ако го користите овој драјвер. Користењето атрибути специфични за драјверот со друг драјвер може да резултира со неочекувано однесување. PDO::ATTR_DRIVER_NAME може да се користи за добивање на

PDO_ODBC_TYPE (string)

PDO::ODBC_ATTR_USE_CURSOR_LIBRARY (int)
Псевдоним на Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY.
PDO::ODBC_SQL_USE_IF_NEEDED (int)
Псевдоним на Pdo\Odbc::SQL_USE_IF_NEEDED.
PDO::ODBC_SQL_USE_DRIVER (int)
Псевдоним на Pdo\Odbc::SQL_USE_DRIVER.
PDO::ODBC_SQL_USE_ODBC (int)
Псевдоним на Pdo\Odbc::SQL_USE_ODBC.
PDO::ODBC_ATTR_ASSUME_UTF8 (bool)
Псевдоним на Pdo\Odbc::ATTR_ASSUME_UTF8.

Конфигурација во време на извршување

Поведението на овие функции е под влијание на поставките во php.ini.

PDO_ODBC Опции за конфигурација
Име Стандардно Променливо Дневник на промени
pdo_odbc.connection_pooling "strict" INI_ALL    
pdo_odbc.db2_instance_name NULL INI_SYSTEM Оваа застарена функција will сигурно ќе биде removed во иднина.
За подетални информации и дефиниции на INI_* режимите, видете го Каде може да се постави поставка за конфигурација.

Еве кратко објаснување на директивите за конфигурација.

pdo_odbc.connection_pooling string

Дали да се групираат ODBC конекциите. Може да биде една од "strict", "relaxed" or "off" (еднакво на ""). Параметарот опишува колку строго менаџерот за конекции треба да биде при совпаѓање на параметрите за конекција со постоечките конекции во пул. strict е препорачаниот стандард и ќе резултира со користење на кеширани конекции само кога сите параметри за конекција се совпаѓаат точно. relaxed ќе резултира со користење на кеширани конекции кога се користат слични параметри за конекција. Ова може да резултира со зголемена употреба на кешот, со ризик од протекување информации за конекција помеѓу (на пример) виртуелни хостови.

Оваа поставка може да се промени само од php.ini датотека, и влијае на целиот процес; сите други модули вчитани во процесот што ги користат истите ODBC библиотеки ќе бидат засегнати исто така, вклучувајќи го и Обединета ODBC екстензија .

Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава

relaxed поклопувањето не треба да се користи на споделен сервер, од безбедносни причини.

Совети

Оставете ја оваа поставка на стандардната strict поставката освен ако немате добра причина да ја промените.

pdo_odbc.db2_instance_name string

Ако го компајлирате PDO_ODBC користејќи го db2 вкус, оваа поставка ја поставува вредноста на променливата на опкружувањето DB2INSTANCE на Linux и UNIX оперативните системи на наведеното име на инстанцата на DB2. Ова му овозможува на PDO_ODBC да ја открие локацијата на DB2 библиотеките и да направи каталогизирани конекции до DB2 базите на податоци.

Оваа поставка може да се промени само од php.ini датотека, и влијае на целиот процес; сите други модули вчитани во процесот што ги користат истите ODBC библиотеки ќе бидат засегнати исто така, вклучувајќи го и Обединета ODBC екстензија .

Оваа поставка нема ефект на Windows.

Содржина

Белешки од корисници 5 белешки

ChristianF
пред 10 години
I just spent a couple of hours trying to track down the Exception "Could not find driver". This was despite having ODBC and PDO_ODBC installed, and all of the configuration seemed to be correct.

Turned out the problem was that I used ODBC in upper-case in the dsn. As soon as I changed the dns to "odbc:database" it worked.

As this code used to work a few months ago, this sudden case-sensitivity threw me for a loop. So in case you get this error, check the casing first.
tuomas
пред 16 години
If you want to avoid installing DB2 Connect and/or PECL modules ibm_db2 and PDO_IBM, you can also use IBM DB2 databases trough unixODBC.

If you have DB2 database on a i server you need to install IBM iAccess (http://www.ibm.com/systems/i/software/access/linux/index.html) and unixODBC. Just install the libraries (rpm) and modify configurations in /etc/odbcinst.ini (sample configuration in /opt/ibm/iSeriesAccess/unixodbcregistration) and /etc/odbc.ini.

To my experience this is much easier way than installing DB2 Connect.
ethan dot nelson at ltd dot org
пред 18 години
Using SQL 2005, PDO_ODBC and datetime fields is a royal pain.  MSDN documentation on CAST CONVERT shows that there is supposed to be an implicit convert between character types and datetime types.  That's true... until you put it in a stored procedure and use variable declarations.

For instance this fails:

declare @date varchar;
SET @date = '20080101';
SELECT cast(@date AS datetime) AS poo

While this succeeds:
declare @date varchar(19);
SET @date = '20080101';
SELECT cast(@date AS datetime) AS poo

The PDO Driver appears to attempt an implicit conversion and so it fails whenever you try to insert data into datetime column types.

So to workaround this nuance in SQL, declare a character column type with explicit width.  Then your implicit type conversion will work.
Ариз Хасинто
пред 14 години
Using SQL Server Native Client 11.0 on Linux as a PDO_ODBC driver:

Download the SQL Server Native Client 11.0 on Linux ODBC Driver:
http://www.microsoft.com/download/en/details.aspx?id=28160

Configuration ODBC:

/usr/local/etc/odbcsys.ini
--
[SQL Server Native Client 11.0]
Description = Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver = /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1720.0
UsageCount = 1

/usr/local/etc/odbc.ini
--
[MSSQLServer]
Driver = SQL Server Native Client 11.0
Description = Sample Database
Trace = Yes
Server = 
Port = 1433
Database = 

Test the connection:
mssqltest.php
--
<?php
    putenv('ODBCSYSINI=/usr/local/etc');
    putenv('ODBCINI=/usr/local/etc/odbc.ini');
    $username = "";
    $password = "";
    try {
      $dbh = new PDO("odbc:MSSQLServer",
                    "$username",
                    "$password"
                   );
    } catch (PDOException $exception) {
      echo $exception->getMessage();
      exit;
    }
    echo var_dump($dbh);
    unset($dbh);
?>
harry dot forum at p-boss dot com
пред 15 години
MSSQL - PHP on Apache - Linux Redhat

When using php 5.2.10 please beaware of this error:

http://bugs.php.net/bug.php?id=42068

Standard odbc_connect will not work, you must use pdo_odbc

Connecting to MSSQL using pdo odbc - walkthrough.. 

1. Download and configure FreeTDS with-unixodbc

./configure --prefix=/opt/SYSfreetds --with-unixodbc

make;make test; make install

2. install php-odbc and unixODBC

         php-odbc-5.2.10-1.x86_64.rpm
         unixODBC.x86_64.x86x64

3. Setup ODBC links

a)
Create a tds.driver file with the following contents

  [FreeTDS]
  Description     = v0.63 with protocol v8.0
  Driver          = /opt/SYSfreetds/lib/libtdsodbc.so

Register the ODBC driver - the tds.driver file

  odbcinst -i -d -f tds.driver

b)
Creating a tds.datasource file - ODBC Data Source with contents:

  [SOURCENAME]
  Driver=FreeTDS
  Description=Test MS SQL Database with FreeTDS
  Trace=No
  Server=BobTheServer
  Port=1433
  TDS Version=8.0
  Database=youDBname

Register the ODBC data source

  odbcinst -i -s -f tds.datasource

Beware that the odbc.ini file will be installed in the current users home directory. This may need to be used if you are using a webserver as the apache home directory could be different.

Ensure .odbc.ini is in apaches home directory, possibly "/var/www"

4. Test the ODBC link on the command line

  isql -v SOURCENAME 'username' 'password'

  +---------------------------------------+
  | Connected!                            |
  |                                       |
  | sql-statement                         |
  | help [tablename]                      |
  | quit                                  |
  |                                       |
  +---------------------------------------+
 SQL>

5. Edit /etc/php.ini

  Make sure the following is set:
     mssql.secure_connection = On
 

6. Restart apache gracefully

7. PHP to run:

  <?
  $dbh= new PDO('odbc:SOURCENAME', 'username', 'password');
  $stmt = $dbh->prepare("$query");
  $stmt->execute();
  while ($row = $stmt->fetch()) {
      print_r($row);
  }
  unset($dbh); unset($stmt);
  ?>

Trouble-shooting:

Please try strace/ truss if you encounter issues. It could be you are referencing wrong libraries somewhere.

Ensure you have restarted apache once the odbc files are in place
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.