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

как установить размер привязываемого параметра для db2_bind_param ?
по-умолчанию размер строкового параметра не более 1МБ
Код: plaintext
1.
2.
3.
4.
5.
bool db2_bind_param  ( 
   resource $stmt  , 
   int $parameter-number  , 
   string $variable-name  
   [, int $parameter-type  [, int $data-type =  0   [, int $precision = - 1   [, int $scale =  0   ]]]] )
ru2.php.net precision

Specifies the precision with which the variable should be bound to the database. This parameter can also be used for retrieving XML output values from stored procedures. A non-negative value specifies the maximum size of the XML data that will be retrieved from the database. If this parameter is not used, a default of 1MB will be assumed for retrieving the XML output value from the stored procedure.
при попытке выполнить привязку параметра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
$sql = "INSERT INTO NULLID.XML_INPUT (FROM_FILE,XML_DATA)
   			VALUES ( '$fname',XMLPARSE(
   					 document cast(? as Clob) preserve whitespace
                   			  )
   		  		    )";
$stmt = db2_prepare($conn, $sql);
$XMLDataString = $xml_source;
if(db2_bind_param($stmt,  1 , "XMLDataString", DB2_PARAM_IN) === false) {		    
    print_r (db2_stmt_errormsg());
выдает сообщение об ошибке
Код: plaintext
[IBM][CLI Driver] CLI0131E Недопустимая длина строки или буфера. SQLSTATE=HY090 SQLCODE=- 99999 

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

Какая версия DB2 ? В состав какого решения входит ?

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

Попробуй через файл ...
db2_bind_param( ...., DB2_PARAM_FILE)

<?php
$stmt = db2_prepare($conn, "INSERT INTO animal_pictures(picture) VALUES (?)");

$picture = "/opt/albums/spook/grooming.jpg";
$rc = db2_bind_param($stmt, 1, "picture", DB2_PARAM_FILE);
$rc = db2_execute($stmt);
?>

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

DB2 LUW 9.7 express-c

GVF112GVF
Попробуй через файл ...
db2_bind_param( ...., DB2_PARAM_FILE)

<?php
$stmt = db2_prepare($conn, "INSERT INTO animal_pictures(picture) VALUES (?)");

$picture = "/opt/albums/spook/grooming.jpg";
$rc = db2_bind_param($stmt, 1, "picture", DB2_PARAM_FILE);
$rc = db2_execute($stmt);
?>
предварительно сделал сохранение текстовой переменной во временный файл
Код: plaintext
1.
2.
3.
4.
5.
$filename = "C:\\work\\xml_data\\tmp$fname";
$file1 = fopen($filename,'w');
fwrite($file1,$XMLDataString);
fclose($file1);
//echo $filename;
if(db2_bind_param($stmt,  1 , "filename", DB2_PARAM_FILE) === false) {	
увы - "не выходит каменный цветок..."
Код: plaintext
1.
2.
XML[IBM][CLI Driver][DB2/NT] SQL0302N 
Значение переменной хоста, заданной в операторе EXECUTE или OPEN, 
вне диапазона для предполагаемого использования. SQLSTATE= 22001  SQLCODE=- 302 
...
Рейтинг: 0 / 0
db2+php+xml-size
    #36816348
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nsk,

Посмотри здесь: DB2 Viper
http://www.ibm.com/developerworks/data/library/techarticle/dm-0511singh/


Create a database connection
$conn =db2_connect($dbname, $dbuser, $dbpass);

Open the document from the file into a variable
$fileContents = file_get_contents("products/p1.xml");

Create a simple XML object from this variable
$dom = simplexml_load_string($fileContents);

Extract the product ID from the document
$prodID = (string) $dom["pid"];

Create a prepared statement to insert the XML document into the database
$stmt =db2_prepare($conn, "INSERT INTO xmlproduct VALUES (?, ?)");


Pass the product ID extracted from the document along with the document as a parameter to the query

db2_execute($stmt, array($prodID, $fileContents);

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


PS:

DB2 9 pureXML Guide
http://www.redbooks.ibm.com/redbooks/pdfs/sg247315.pdf

DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
http://www.redbooks.ibm.com/redbooks/pdfs/sg247301.pdf

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

как установить размер привязываемого параметра для db2_bind_param ?
по-умолчанию размер строкового параметра не более 1МБ
Код: plaintext
1.
2.
3.
4.
5.
bool db2_bind_param  ( 
   resource $stmt  , 
   int $parameter-number  , 
   string $variable-name  
   [, int $parameter-type  [, int $data-type =  0   [, int $precision = - 1   [, int $scale =  0   ]]]] )
ru2.php.net precision

Specifies the precision with which the variable should be bound to the database. This parameter can also be used for retrieving XML output values from stored procedures. A non-negative value specifies the maximum size of the XML data that will be retrieved from the database. If this parameter is not used, a default of 1MB will be assumed for retrieving the XML output value from the stored procedure.
при попытке выполнить привязку параметра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
$sql = "INSERT INTO NULLID.XML_INPUT (FROM_FILE,XML_DATA)
   			VALUES ( '$fname',XMLPARSE(
   					 document cast(? as Clob) preserve whitespace
                   			  )
   		  		    )";
$stmt = db2_prepare($conn, $sql);
$XMLDataString = $xml_source;
if(db2_bind_param($stmt,  1 , "XMLDataString", DB2_PARAM_IN) === false) {		    
    print_r (db2_stmt_errormsg());
выдает сообщение об ошибке
Код: plaintext
[IBM][CLI Driver] CLI0131E Недопустимая длина строки или буфера. SQLSTATE=HY090 SQLCODE=- 99999 

ни в примерах, ни в доках нигде не нашел путей решения проблемы... :(

Не уверен что поможет,
можно попробывать увеличить значение параметра- (rqrioblk), сlient I/O block size configuration parameter.

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

Не уверен что поможет,
можно попробывать увеличить значение параметра- (rqrioblk), сlient I/O block size configuration parameter.

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

ПХП - таки open-source... :)
смотрю в исходниках
там есть любопытный кусок кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
PHP_FUNCTION(db2_bind_param)
{
	char *varname = NULL;
	int argc = ZEND_NUM_ARGS();
	int stmt_id = - 1 ;
	int varname_len;
	long param_type; /* set default here */
	/* LONG types used for data being passed in */
	long param_no =  0 ;
	long data_type =  0 ;
	long precision = - 1 ;
	long scale =  0 ;

        ...
		switch (argc) {
			/* if argc == 3, then the default value for param_type will be used */
			case  3 :
				param_type = DB2_PARAM_IN;
				/* Fall through */

			/* Otherwise, param_type will contain the value passed in */
			case  4 :
			case  5 :
			case  6 :
				/* No param data specified */
                                ....
				if((sql_data_type == SQL_XML) && ((param_type == DB2_PARAM_OUT) || (param_type == DB2_PARAM_INOUT)))
				{
					if(precision <  0 )
					{
						sql_precision =  1048576 ;
					}
					else
					{
						sql_precision = (SQLUINTEGER)precision;
					}
				}
полагаю, что нужно попробовать через хранимую процедуру, т.к. на insert DB2_PARAM_INOUT никак не пойдет
в примерах в исходниках есть что-то подобное...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    $stmt = db2_prepare($dbconn, 'CALL test_xml2(?, ?, ?, ?, ?, ?)');
    $xmlResult1 = '';
    $xmlResult2 = '';
    $xmlResult3 = '';
    $xmlResult4 = '';
    $xmlResult5 = '';
    $xmlResult6 = '';

    db2_bind_param($stmt,  1 , "xmlResult1", DB2_PARAM_IN, DB2_XML,  2 );
    db2_bind_param($stmt,  2 , "xmlResult2", DB2_PARAM_IN, DB2_XML,  5 ,  3 );
    db2_bind_param($stmt,  3 , "xmlResult3", DB2_PARAM_OUT, DB2_XML,  5 );
    db2_bind_param($stmt,  4 , "xmlResult4", DB2_PARAM_OUT, DB2_XML, - 1 ,  10 );
    db2_bind_param($stmt,  5 , "xmlResult5", DB2_PARAM_INOUT, DB2_XML,  0 ,  4 );
    db2_bind_param($stmt,  6 , "xmlResult6", DB2_PARAM_INOUT, DB2_XML,  2 ,  4 );
    $res = db2_execute($stmt);
    if (!$res) {
        echo db2_stmt_errormsg();
    }
...
Рейтинг: 0 / 0
db2+php+xml-size
    #36816829
jack_nsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
однако, как оказалось, не всё так просто...

посмотрел пример создания хранимой процедуры с использованием функций поддержки XML

попробовал создать подобное в редакторе команд...
ан нет!
авторSQL0440N Не найдено доступной подпрограммы "XMLPARSE" типа "FUNCTION

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

Сервер баз данных = DB2/NT 9.7.2
ID авторизации SQL = USER
Алиас локальной базы данных = SAMPLE
...
Рейтинг: 0 / 0
db2+php+xml-size
    #36816846
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nskGVF112GVF

Не уверен что поможет,
можно попробывать увеличить значение параметра- (rqrioblk), сlient I/O block size configuration parameter.

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

ПХП - таки open-source... :)
смотрю в исходниках
там есть любопытный кусок кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
PHP_FUNCTION(db2_bind_param)
{
	char *varname = NULL;
	int argc = ZEND_NUM_ARGS();
	int stmt_id = - 1 ;
	int varname_len;
	long param_type; /* set default here */
	/* LONG types used for data being passed in */
	long param_no =  0 ;
	long data_type =  0 ;
	long precision = - 1 ;
	long scale =  0 ;

        ...
		switch (argc) {
			/* if argc == 3, then the default value for param_type will be used */
			case  3 :
				param_type = DB2_PARAM_IN;
				/* Fall through */

			/* Otherwise, param_type will contain the value passed in */
			case  4 :
			case  5 :
			case  6 :
				/* No param data specified */
                                ....
				if((sql_data_type == SQL_XML) && ((param_type == DB2_PARAM_OUT) || (param_type == DB2_PARAM_INOUT)))
				{
					if(precision <  0 )
					{
						sql_precision =  1048576 ;
					}
					else
					{
						sql_precision = (SQLUINTEGER)precision;
					}
				}
полагаю, что нужно попробовать через хранимую процедуру, т.к. на insert DB2_PARAM_INOUT никак не пойдет
в примерах в исходниках есть что-то подобное...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    $stmt = db2_prepare($dbconn, 'CALL test_xml2(?, ?, ?, ?, ?, ?)');
    $xmlResult1 = '';
    $xmlResult2 = '';
    $xmlResult3 = '';
    $xmlResult4 = '';
    $xmlResult5 = '';
    $xmlResult6 = '';

    db2_bind_param($stmt,  1 , "xmlResult1", DB2_PARAM_IN, DB2_XML,  2 );
    db2_bind_param($stmt,  2 , "xmlResult2", DB2_PARAM_IN, DB2_XML,  5 ,  3 );
    db2_bind_param($stmt,  3 , "xmlResult3", DB2_PARAM_OUT, DB2_XML,  5 );
    db2_bind_param($stmt,  4 , "xmlResult4", DB2_PARAM_OUT, DB2_XML, - 1 ,  10 );
    db2_bind_param($stmt,  5 , "xmlResult5", DB2_PARAM_INOUT, DB2_XML,  0 ,  4 );
    db2_bind_param($stmt,  6 , "xmlResult6", DB2_PARAM_INOUT, DB2_XML,  2 ,  4 );
    $res = db2_execute($stmt);
    if (!$res) {
        echo db2_stmt_errormsg();
    }



А что это за параметр - sql_precision = 1048576 ?!
Если его увеличить в два раза .... :)

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

precision - Specifies the precision with which the variable should be bound to the database. This parameter can also be used for retrieving XML output values from stored procedures. A non-negative value specifies the maximum size of the XML data that will be retrieved from the database. If this parameter is not used, a default of 1MB will be assumed for retrieving the XML output value from the stored procedure.

http://php.net/manual/en/function.db2-bind-param.php

db2_bind_param ibm_db2 function - Binds a PHP variable to an SQL statement parameter -
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.apdv.php.doc/doc/r0022495.htm

Binding PHP variables to a prepared statement
The SQL statement in the following example uses two input parameters in the WHERE clause. We call db2_bind_param() to bind two PHP variables to the corresponding SQL parameters. Notice that the PHP variables do not have to be declared or assigned before the call to db2_bind_param(); in the example, $lower_limit is assigned a value before the call to db2_bind_param(), but $upper_limit is assigned a value after the call to db2_bind_param(). The variables must be bound and, for parameters that accept input, must have any value assigned, before calling db2_execute().

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

ПХП - таки open-source... :)
смотрю в исходниках
там есть любопытный кусок кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
PHP_FUNCTION(db2_bind_param)
{
	long precision = - 1 ;
	long scale =  0 ;

        ...
		switch (argc) {

			case  6 :
				/* No param data specified */
                                ....
				if((sql_data_type == SQL_XML) && ((param_type == DB2_PARAM_OUT) || (param_type == DB2_PARAM_INOUT)))
				{
					if(precision <  0 )
					{
						sql_precision =  1048576 ;
					}
					else
					{
						sql_precision = (SQLUINTEGER)precision;
					}
				}



А что это за параметр - sql_precision = 1048576 ?!
Если его увеличить в два раза .... :)

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

авторprecision

Specifies the precision with which the variable should be bound to the database. This parameter can also be used for retrieving XML output values from stored procedures. A non-negative value specifies the maximum size of the XML data that will be retrieved from the database. If this parameter is not used, a default of 1MB will be assumed for retrieving the XML output value from the stored procedure.

по-умолчанию, размер привязываемого параметра не более 1МБ...

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

Есть несколько путей решения - простой, сложный и очень сложный.
Труднее всего - найти простой ... и опыт сын ошибок трудных ... :)

Думаю, что проблему можно обойти. Как - решать Вам ... ;)

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

Есть несколько путей решения - простой, сложный и очень сложный.
Труднее всего - найти простой ... и опыт сын ошибок трудных ... :)

Думаю, что проблему можно обойти. Как - решать Вам ... ;)

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

простой путь -
Код: plaintext
1.
2.
3.
4.
5.
6.
  	  $sql = "INSERT INTO DB2ADMIN.XML_FROM_FILES(FROM_FILE,XML_DATA) 
  	          VALUES('$fname',
  	                  XMLVALIDATE(CAST (? as XML) ACCORDING TO XMLSCHEMA ID DB2ADMIN.myShema)
  	                )";  		    
	  $stmt = db2_prepare($conn, $sql);
	  $XMLDataString = $xml_source;	  
	  if(db2_bind_param($stmt,  1 , "XMLDataString") === false) {
:)
...
Рейтинг: 0 / 0
db2+php+xml-size
    #36818620
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jack_nsk,

Поздравляю с решением задачи!

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


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