2013-10-04 2 views
3

Я пытаюсь подключиться к базе данных IBM AS/400 DB2 клиента с сервера Ubuntu с помощью драйвера ODBC PHP. У меня установлен unixODBC. Мои odbcinst.ini выглядит следующим образом:Подключение к базе данных DB2 IBM AS/400

[IBM DB2 ODBC DRIVER] 
Description = ODBC 5.1 Driver for Database 
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so 
FileUsage = 1 

И мой odbc.ini выглядит следующим образом:

[IBM DB2 ODBC DRIVER] 
Driver = IBM DB2 ODBC DRIVER 
Description = ODBC 5.1 Driver DSN 

Теперь мой код, чтобы соединиться:

$server = '12.345.678.90' //IP 
$port = '446' //PORT 
$username = 'my_username'; 
$password = 'my_password'; 

$connect = odbc_connect("DRIVER = {IBM DB2 ODBC DRIVER};System=$server:$port;Uid=$username;Pwd=$password;", $username, $password); 

if(!$connect) 
    echo 'Cannot Connect!'; 
else 
    echo 'Connected!'; 

Ошибка, которую я получаю, такова:

Warning: odbc_connect(): SQL Error: [unixODBC][MySQL][ODBC 5.1 Driver]Access denied for user 'my_username'@'localhost' (using password: YES), SQL state S1000 in SQLConnect 

Я также попытался использовать драйвер PDO ODBC. Это ошибка, которую я получаю:

$connect = new PDO("odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=$server;PORT=$port;Uid=$username;Pwd=$password"); 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] SQLDriverConnect: 1045 [unixODBC][MySQL][ODBC 5.1 Driver]Access denied for user 'my_username'@'localhost' (using password: YES)' in /var/www/test_file.php Stack trace: #0 /var/www/test_file.php: PDO->__construct('odbc:DRIVER={IB...') #1 {main} thrown in /var/www/test_file.php 

Я делаю что-то неправильно здесь? Нужно ли использовать какой-либо другой драйвер, потому что имя пользователя и пароль верны, я видел, как клиент заходил в базу данных, используя имя пользователя и пароль, которые у меня есть. Я думал, что имя пользователя и пароль неверны, потому что он говорит Доступ запрещен для пользователя. Кажется, это не так. Возможно, что-то еще не так.

Благодарим за помощь. Надеюсь, я поставил проблему очень ясно. Благодаря!

ответ

5

Ваш odbcinst.ini файл говорит, чтобы использовать драйвер MySQL ODBC:

Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so 

но вы должны использовать ISeries Access ODBC драйвер на . Причина, по которой вы получаете сообщение Access Denied for User, заключается в том, что вы пытаетесь подключиться к базе данных MySQL с учетными данными для IBM i.

Здесь шаг за шагом инструкции о том, как подключиться к DB2 для I (на IBM I) на Ubuntu:

Скачать бесплатно iSeriesAccess-6.1.0-1.2.i386.rpm файл с IBM (вы должны создать бесплатную учетную запись, чтобы получить это - и я уверен, что есть более новая версия, чем 6.1.0-1.2)

Преобразовать файл RPM к чему-то Ubuntu понимает: sudo alien iSeriesAccess-6.1.0-1.2.i386.rpm

Установите полученный .deb: sudo dpkg -i iseriesaccess_6.1.0-2.2_i386.deb

Скопируйте установленные ISeries библиотеки в Ubuntu, где их ожидает: sudo cp /opt/ibm/iSeriesAccess/lib/* /usr/lib

Редактировать файл файла /etc/odbc.ini содержать:

[primary] 
Description    = primary 
Driver     = iSeries Access ODBC Driver 
System     = IP_ADDRESS 
UserID     = USERNAME 
Password    = PASSWORD 
Naming     = 1 
DefaultLibraries  = QGPL 
Database    = XXXXXXXXXX 
ConnectionType   = 0 
CommitMode    = 2 
ExtendedDynamic   = 0 
DefaultPkgLibrary  = QGPL 
DefaultPackage   = A/DEFAULT(IBM),2,0,1,0,512 
AllowDataCompression = 1 
LibraryView    = 0 
AllowUnsupportedChar = 0 
ForceTranslation  = 0 
Trace     = 0 

Редактирование /и т.д./odbcinst.ини файл содержит:

[iSeries Access ODBC Driver] 
Description  = iSeries Access for Linux ODBC Driver 
Driver   = /usr/lib/libcwbodbc.so 
Setup   = /usr/lib/libcwbodbcs.so 
NOTE1   = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's, 
NOTE2   = the following Driver64/Setup64 keywords will provide that support. 
Driver64  = /usr/lib/lib64/libcwbodbc.so 
Setup64   = /usr/lib/lib64/libcwbodbcs.so 
Threading  = 2 
DontDLClose  = 1 
UsageCount  = 1 

И затем, чтобы создать соединение с PDO:

$pdo = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$server;PROTOCOL=TCPIP", $username, $password); 
+0

Спасибо за ответ , Я установил ** iSeriesAccess-7.1.0-1.0x86_64.rpm **, потому что не смог установить ** i386 **. Позвольте мне попробовать с тем, что вы предоставили. Но я не могу установить для ** i386 ** architechture. Благодарю. Позвольте мне попробовать это и вернуться к вам. Большое спасибо! – sulavvr

+0

Единственная разница между ** odbcinst.ini **, которую вы предоставили, и моей: ** Driver = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so** ** Setup =/opt/ibm/iSeriesAccess/lib64/libcwbodc.so ** Все остальное было таким же. Я попытался подключиться с помощью PDO, но сообщение об ошибке, которое я получил, было то, что ** libcwbodbc.so ** не был найден. Есть идеи? Благодарю. – sulavvr

+0

@flyingDuck - вам нужно убедиться, что в вашем файле 'odbcinst.ini' есть строки' Driver = xxx' и 'Setup = xxx', указывающие, где находится ваш ** libcwbodbc.so **. –

4

я должен был получить доступ/DB2 IBM работает с ODBC/PHP на поле Ubuntu в последнее время. Вы, вероятно, можете приспособить это для большинства других дистрибутивов: Вот как я получил это работает:

[1] Загрузить одно из следующих действий, в зависимости от требуемой версии и архитектур DB2

iSeriesAccess-5.4.0-1.6.i386.rpm 
iSeriesAccess-5.4.0-1.6.ppc.rpm 
iSeriesAccess-5.4.0-1.6.ppc64.rpm 
iSeriesAccess-5.4.0-1.6.x86_64.rpm 
iSeriesAccess-6.1.0-1.0.i386.rpm 
iSeriesAccess-6.1.0-1.0.ppc.rpm 
iSeriesAccess-6.1.0-1.0.ppc64.rpm 
iSeriesAccess-6.1.0-1.0.x86_64.rpm 

Вы можете получить это с сайта IBM, или здесь:

http://www.mmnt.net/db/0/0/public.dhe.ibm.com/as400

Затем установите as400 Client Access IBM, используя что-то вроде этого:

sudo apt-get install alien libmotif3 
cd /path/to/iSeriesAccess-6.1.0-1.0.i386.rpm 
sudo alien -dckv iSeriesAccess-6.1.0-1.0.i386.rpm 
sudo dpkg -i iseriesaccess_6.1.0-1.0_i386.deb 

[2] Установите Java (при необходимости)

sudo apt-get install sun-java6-jre 

[3] Установка UnixODBC

sudo apt-get install unixodbc-bin 

[4] Установка PHP ODBC

sudo apt-get install php5-odbc 

[5] Ldconfig Создать файл /etc/ld.so.conf.d/iSeriesAccess.conf с этой строкой:

/opt/ibm/iSeriesAccess/lib/ 

Затем выполните следующие действия:

sudo ldconfig 

[6] Регистрация драйвера

sudo odbcinst -i -d -f /opt/ibm/iSeriesAccess/unixodbcregistration 

[7] Проверьте это с некоторыми PHP кода

<?php 
$user = 'SomeUser'; 
$pass = 'SomePass'; 
$Conn = odbc_connect("DRIVER={iSeries Access ODBC Driver};DATABASE=DBNAME;SYSTEM=127.0.0.1;HOSTNAME=127.0.0.1;PORT=446;PROTOCOL=TCPIP", $user, $pass); 
if($Conn === false){ 
    die('failed to connect'); 
} 
$sql = "select * from database.table fetch first 10 rows only"; 

$result=odbc_exec($Conn,$sql); 

echo '<pre>'; 

while(odbc_fetch_array(($result)){ 
     print_r($result); 
    } 
} 
Смежные вопросы