Получить данные из oracle...

grin

Guest
Получить данные из oracle...

имеем код
PHP:
$proc = 'DECLARE
	a NUMBER;
BEGIN
	dafapi.payment_make(\''.$result->fields['code'].$result->fields['number'].'\', '.$result->fields['sum'].');
	a := dafapi.payment_id;
END;';

$s = OCIParse($c, $proc);
OCIBindByName($s, "a", $sid, -1);

echo $sid."\n";
нет ничего в $sid, скорее всего я совсем не умею использовать OCIBindByName.

например SQLPlus на
PHP:
SET SERVEROUTPUT ON
DECLARE
	a NUMBER;
BEGIN
	dafapi.payment_make('9263862340', 5.00);
	a := dafapi.payment_id;

	DBMS_OUTPUT.enable;
	DBMS_OUTPUT.put_line(a);
END;
все отлично выводит
 

grin

Guest
и правад, тупка :)
на данный момент
PHP:
$s = OCIParse($c, 'BEGIN dafapi.payment_make(:number, :sum); :sid := dafapi.payment_id; END;');
OCIBindByName($s, ":number", $result->fields['code'].$result->fields['number']);
OCIBindByName($s, ":sum", $result->fields['sum']);
OCIBindByName($s, ":sid", $sid, -1);

OCIExecute($s, OCI_DEFAULT); 
echo $sid."\n";
ничего не выводит, вообще ничего, он даже OCILogon($username,$passwd,$db); не выполняет
 

CMHungry

Guest
Автор оригинала: grin

ничего не выводит, вообще ничего, он даже OCILogon($username,$passwd,$db); не выполняет
Ну так и поставь error_reporting повыше, да ociinternaldebug включи.
 

grin

Guest
PHP:
error_reporting(E_ALL);

$username = "****";
$passwd = "****";

$db="(DESCRIPTION=
         (ADDRESS_LIST=
           (ADDRESS=(PROTOCOL=TCP)
             (HOST=****)(PORT=1521)
           )
         )
           (CONNECT_DATA=(SERVICE_NAME=****))
     )";

ociinternaldebug(1);
$c = OCILogon($username,$passwd,$db);

$s = OCIParse($c, "begin dafapi.logon('****', '****'); end;");
OCIExecute($s, OCI_DEFAULT);

$s = OCIParse($c, 'BEGIN dafapi.payment_make(:number, :sum); :sid := dafapi.payment_id; END;');
OCIBindByName($s, ":number", '9263862340');
OCIBindByName($s, ":sum", 5.00);
OCIBindByName($s, ":sid", $sid);

OCIExecute($s, OCI_DEFAULT); 

echo $sid."\n";

OCILogoff($c);
через консоль

grin@pserv cron $ php ./megafon_oracle.php
grin@pserv cron $

и все, вообще ничего не выводит

если убрать
PHP:
$s = OCIParse($c, 'BEGIN dafapi.payment_make(:number, :sum); :sid := dafapi.payment_id; END;');
OCIBindByName($s, ":number", '9263862340');
OCIBindByName($s, ":sum", 5.00);
OCIBindByName($s, ":sid", $sid);

OCIExecute($s, OCI_DEFAULT);
конектица без проблем, да и в SQLPlus эта процедура работает без проблем
 

CMHungry

Guest
попробуй обернуть sql-код в еще одну процедуру - раз
и указать размеры переменных в ocibindbyname - два

у меня ораклевый код валился в пхп без матюков только в случае глюков в oci, т.е. в самом ораклевом клиенте

Если оракл 8ка - то точно оно.
 

grin

Guest
ок, завтра попробую :) а сейчас спать....

-~{}~ 27.02.05 20:04:

не знаю почему, но так все работает
PHP:
$phone = $result->fields['code'].$result->fields['number'];
$amount = $result->fields['sum'];

$payment = OCIParse($c, 'BEGIN dafapi.payment_make(:phone, :amount); :sid := dafapi.payment_id; END;');
OCIBindByName($payment, ":phone", &$phone, 32);
OCIBindByName($payment, ":amount", &$amount, 32);
OCIBindByName($payment, ":sid", $sid, 32);
OCIExecute($payment, OCI_DEFAULT);
 
Сверху