powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2+php+xml insert
9 сообщений из 9, страница 1 из 1
db2+php+xml insert
    #36810952
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем доброго дня!

прикрутил php к db2()
стоят на одном компьютере winXP
генерирую в пхп-скрипте команду для выполнения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
$XMLDataString = '<data>......</data>';
$conn = db2_connect($database, $user, $password);
$sql = "INSERT INTO NULLID.XML_INPUT (XML_DATA)
   VALUES ( XMLPARSE(document '$XMLDataString'
                    	preserve whitespace
                   	)
   			)";
echo $sql;
$stmt = db2_prepare($conn, $sql);

из штатного редактора команд DB2 полученный sql выполняется
Код: plaintext
1.
2.
3.
4.
5.
6.
INSERT INTO NULLID.XML_INPUT (XML_DATA) VALUES ( XMLPARSE(document '
<?xml version="1.0" encoding="UTF-8"?> 
<data xmlns="http://www....
........
</data>' preserve whitespace ) )
DB20000I  Команда SQL выполнена успешно.
параметры соединения редактора команд -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
connect to SAMPLE user db2admin using          

   Информация соединения с базой данных

 Сервер баз данных           = DB2/NT  9 . 7 . 2 
 ID авторизации SQL          = DB2ADMIN
 Алиас локальной базы данных = SAMPLE

SQLCA Information
 sqlcaid : SQLCA    sqlcabc:  136  sqlcode:  0  sqlerrml:  70 
 sqlerrmc:  7   1208  DB2ADMIN SAMPLE QDB2/NT  850   850   0   1251   0                        
 sqlerrp : SQL09072
 sqlerrd : [ 1 ]:  3  [ 2 ]: - 1  [ 3 ]:  0 
           [ 4 ]:  1  [ 5 ]:  0  [ 6 ]:  0 
 sqlwarn : [ 1 ]:   [ 2 ]:   [ 3 ]:   [ 4 ]:   [ 5 ]:   [ 6 ]:  
           [ 7 ]:   [ 8 ]:   [ 9 ]:   [ 10 ]:   [ 11 ]:  
 sqlstate:  00000 \APPLIC~ 1 \IBM\DBì!¬#2COPY1\DB2

SQLSTATE:  00000 \APPLIC~ 1 \IBM\DBì!¬#2COPY1\DB2
Соединение JDBC с назначением выполнено успешно.

смотрю параметры соединения со стороны ПХП
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$conn = db2_connect($database, $user, $password);
$client = db2_client_info( $conn );
print_r($client);
stdClass Object
(
    [DRIVER_NAME] => DB2CLI.DLL
    [DRIVER_VER] =>  09 . 07 . 0002 
    [DATA_SOURCE_NAME] => SAMPLE
    [DRIVER_ODBC_VER] =>  03 . 51 
    [ODBC_VER] =>  03 . 01 . 0000 
    [ODBC_SQL_CONFORMANCE] => EXTENDED
    [APPL_CODEPAGE] =>  1251 
    [CONN_CODEPAGE] =>  1251 
)
ПХП-скрипт завершается ошибкой
Код: plaintext
1.
[IBM][CLI Driver][DB2/NT] SQL16132N �������� XML �������� ������������ ��������� ���������. SQLSTATE=2200M SQLCODE=-16132statament failed
в php.ini
default_charset = "utf-8"

в какую сторону смотреть ?
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36811087
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nsk,

Читай сообщение:

bash-3.2$ db2 ? SQL16132N

SQL16132N XML document contains an invalid document structure.

Explanation:
While parsing an XML document, the parser encountered an invalid
document structure. The parser encountered non-whitespace character data
in the prolog of an instance document or in the external subset of a
DTD.


Parsing or validation did not complete.
User response:
Correct the XML document and try the operation again.

С уважением,
Вадим.
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36811234
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GVF112GVFjack_nsk,

Читай сообщение:

bash-3.2$ db2 ? SQL16132N

SQL16132N XML document contains an invalid document structure.

xml-документ валидный
в том то и дело

судя по инфе из редактора команд
Код: plaintext
1.
 sqlcaid : SQLCA    sqlcabc:  136  sqlcode:  0  sqlerrml:  70 
 sqlerrmc:  7   1208  DB2ADMIN SAMPLE QDB2/NT  850   850   0   1251   0 
сообщение об ошибке идет в кодовой странице 1251
добавил вывод сообщения об ошибке с перекодировкой
Код: plaintext
1.
2.
3.
4.
$stmt = db2_prepare($conn, $sql);
    if(db2_execute($stmt) === false)
    {  print_r ( cp1251_to_utf8(db2_stmt_errormsg()));

[IBM][CLI Driver][DB2/NT] SQL16132N Документ XML содержит недопустимую структуру документа. SQLSTATE=2200M SQLCODE=-16132statament failed

проблема именно в кодировке подключения со стороны ПХП
если в птичке я явно указывал кодовую страницу
Код: plaintext
ibase_connect($ibpath,$username,$password,'win1251')
то для db2 не увидел такого параметра
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.swg.im.dbclient.php.doc/doc/t0023132.html

xml-схема зарегистрирована в базе
теги у неё в кирилице, но через редактор команд я могу xml загрузить, а из пхп - нет :(
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36811305
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nsk,

1. В какой кодировке создавалась база данных (UTF-8 или 1251) ?
2. Что показывает вывод - db2set (DB2CODEPAGE, DB2COUNTRY, DB2TERRITORY) ?

C уважением,
Вадим.
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36811324
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nsk,

Смотри здесь:

1. Understanding DB2 Universal Database character conversion -
http://www.ibm.com/developerworks/data/library/techarticle/dm-0506chong/index.html

2. Очень хорошая презентация с IDUG.org: "Code sets, NLS, character
conversion vs. DB2" -
http://www.idug.org/conferences/EU2006/data/EU06D16.pdf

3. Раздел в документации по DB2 9.7: Multicultural support -
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/nav/2_7

С уважением,
Вадим.
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36811586
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GVF112GVFjack_nsk,

1. В какой кодировке создавалась база данных (UTF-8 или 1251) ?
2. Что показывает вывод - db2set (DB2CODEPAGE, DB2COUNTRY, DB2TERRITORY) ?

C уважением,
Вадим.

1. UTF-8 с поддержкой XQuery

2. ммм... :)
сходу не получилось вытащить
DB2CODEPAGE, DB2COUNTRY, DB2TERRITORY
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
C:\Program Files\Far>db2set -i
DB2PROCESSORS= 0 , 1 
DB2INSTPROF=C:\Documents and Settings\All Users\Application Data\IBM\DB2\DB2COPY1
DB2COMM=TCPIP

C:\Program Files\Far>db2set -g
DB2_COMPATIBILITY_VECTOR=MYS
DB2_EXTSECURITY=NO
DB2SYSTEM=DANILA
DB2PATH=C:\Program Files\IBM\SQLLIB
DB2INSTDEF=DB2
DB2ADMINSERVER=DB2DAS00
только через графические инструменты... :)
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36811611
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GVF112GVFjack_nsk,

Смотри здесь:

1. Understanding DB2 Universal Database character conversion -
http://www.ibm.com/developerworks/data/library/techarticle/dm-0506chong/index.html

2. Очень хорошая презентация с IDUG.org: "Code sets, NLS, character
conversion vs. DB2" -
http://www.idug.org/conferences/EU2006/data/EU06D16.pdf

3. Раздел в документации по DB2 9.7: Multicultural support -
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/nav/2_7

С уважением,
Вадим.

спасибо, Вадим!
из EU06D16
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Default code page
• As default DB2 server and clients use the local
settings of the operating system or user:
• Windows: The server process is using the default region
settings of the operating system.
• Linux/Unix: The codepage is derived from the locale
setting for the instance user (i.e. the user running the
database processes).
• Client (LUW): The current locale settings of the user
determine the code page used during CONNECT.
• Programming language: Java is always using Unicode
when connecting to a database via JDBC.

т.е. получается нужно перед коннектом из ПХП (или сразу после коннекта) изменить переменные среды... в моем случае по-умолчанию берет наверное кодовую страницу ОС - 1251, отсюда и проблемы при передаче xml не в utf-8

буду смотреть дальше...
ещё раз спасибо
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36811656
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nsk,

можно еще попробывать:

db2set DB2CODEPAGE=1251
db2set DB2COUNTRY=7
db2set DB2TERRITORY=7

обычно используют UNICODE:

db2set DB2CODEPAGE=1208 (для UTF-8)
db2set DB2COUNTRY=7
db2set DB2TERRITORY=7


С уважением,
Вадим Головский.
...
Рейтинг: 0 / 0
db2+php+xml insert
    #36812289
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вадим, ещё раз спасибо за наводки!

GVF112GVFjack_nsk,

можно еще попробовать:

db2set DB2CODEPAGE=1251
db2set DB2COUNTRY=7
db2set DB2TERRITORY=7

обычно используют UNICODE:

db2set DB2CODEPAGE=1208 (для UTF-8)
db2set DB2COUNTRY=7
db2set DB2TERRITORY=7

С уважением,
Вадим Головский.

в-общем, примерно так
судя по
Код: plaintext
1.
2.
3.
Default code page
• Client (LUW): The current locale settings of the user
determine the code page used during CONNECT.
и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$conn = db2_connect($database, $user, $password);
$client = db2_client_info( $conn );
print_r($client);
stdClass Object
(
    [DRIVER_NAME] => DB2CLI.DLL
    [DRIVER_VER] =>  09 . 07 . 0002 
    [DATA_SOURCE_NAME] => SAMPLE
    [DRIVER_ODBC_VER] =>  03 . 51 
    [ODBC_VER] =>  03 . 01 . 0000 
    [ODBC_SQL_CONFORMANCE] => EXTENDED
    [APPL_CODEPAGE] =>  1251 
    [CONN_CODEPAGE] =>  1251 
)
ПХП, используя библиотеку расширений php_ibm_db2.dll, использует драйвер DB2CLI.DLL, который в свою очередь по-умолчанию использует локаль ОС = 1251, т.к. переменная DB2CODEPAGE для него явно не указана

прописываем для DB2CLI.DLL DB2CODEPAGE=1208
Код: plaintext
1.
2.
db2set -g DB2CODEPAGE= 1208 
db2set -i DB2CODEPAGE= 1208 
проверяем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
db2set -all

[e] DB2PATH=C:\Program Files\IBM\SQLLIB
[i] DB2PROCESSORS= 0 , 1 
[i] DB2INSTPROF=C:\Documents and Settings\All Users\Application Data\IBM\DB2\DB2COPY1
[i] DB2COMM=TCPIP
[i] DB2CODEPAGE= 1208 
[g] DB2_COMPATIBILITY_VECTOR=MYS
[g] DB2_EXTSECURITY=NO
[g] DB2SYSTEM=DANILA
[g] DB2PATH=C:\Program Files\IBM\SQLLIB
[g] DB2INSTDEF=DB2
[g] DB2CODEPAGE= 1208 
[g] DB2ADMINSERVER=DB2DAS00
перегружаем компьютер,
проверяем параметры коннекта ПХП к ДБ2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
stdClass Object
(
    [DRIVER_NAME] => DB2CLI.DLL
    [DRIVER_VER] =>  09 . 07 . 0002 
    [DATA_SOURCE_NAME] => SAMPLE
    [DRIVER_ODBC_VER] =>  03 . 51 
    [ODBC_VER] =>  03 . 01 . 0000 
    [ODBC_SQL_CONFORMANCE] => EXTENDED
    [APPL_CODEPAGE] =>  1208 
    [CONN_CODEPAGE] =>  1208 
)


вот и ВСЁ!
работает!
ФУФ
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / db2+php+xml insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]