Я успешно подключился к удаленной базе данных IBM i DB2 (AS400) с моего локального ПК с Windows через PHP. Я использую IBM Data Server Client совместно с db2_*
в PHP. Проблема, с которой я сталкиваюсь, заключается в том, что, несмотря на то, что мой список библиотек установлен правильно, он не используется для имен неквалифицированных таблиц. Вместо этого он использует текущее имя пользователя в качестве библиотеки. Однако, когда я квалифицирую имена таблиц, все работает как шарм.
Я подтвердил, что список моей библиотеки действительно меняется, когда я создаю соединение, запрашивая QSYS2.LIBRARY_LIST_INFO
.
$database = '<database name>'; $user = '<user name>'; $password = '<password'; $port = <port>; $options['i5_naming'] = DB2_I5_NAMING_ON; $options['autocommit'] = DB2_AUTOCOMMIT_OFF; $options['i5_libl'] = 'MYLIB YOURLIB ANYLIB'; $conn = db2_connect($database, $user, $password, $options); if ($conn) { echo "Connection succeeded."; //It succeeds } else { echo db2_conn_error()." | ".db2_conn_errormsg()."<br />"; echo "Connection failed."; } $sql = "SELECT * FROM QSYS2.LIBRARY_LIST_INFO"; //Works and proves my library list reflects //what I passed in when creating the connection. //$sql = "SELECT * FROM LIBRARY_LIST_INFO"; //Generates: "42S02 : [IBM][CLI Driver][AS] SQL0204N "<user name>.LIBRARY_LIST_INFO" is an undefined name. SQLSTATE=42704 SQLCODE=-204" //where <user name> is the username used to connect to the DB. //It should be using the library list specified when creating the connection though. //This holds true for any table from any library including those specified //when creating the connection (which includes QSYS2). $stmt = db2_prepare($conn, $sql); $result = db2_execute($stmt); if($result){ while($row = db2_fetch_assoc($stmt)){ echo "<pre>"; var_dump($row); //In addition to entries for QSYS, QSYS2, QUSRSYS and QHLPSYS I get entries for MYLIB, YOURLIB and ANYLIB. echo "</pre>"; } }else{ echo "failed<br />"; echo db2_stmt_error()." : ".db2_stmt_errormsg()."<br />"; }
Кто-нибудь когда-либо сталкивался с этим, позволяя i5_naming при подключении к удаленному серверу DB2? Я не совсем уверен, почему он не будет использовать мой список библиотек, поскольку в руководстве по PHP указано, что «Неквалифицированные файлы разрешены с использованием списка библиотек для задания». когда включено. http://php.net/manual/en/function.db2-connect.php