Вопросы по синтаксису связки PHP +Oracle

Nexta

Новичок
Вопросы по синтаксису связки PHP +Oracle

1.Имеется скрипт обращающийся к базе данных Oracle
возник вопрос обязательно ли совпадение имен переменных PHP и переменных процедуры Oracle.
т.е какое из написаний будет правильным:
ocibindbyname($Statement, ': f_account', $alogin);
ocibindbyname($Statement, ':alogin', $alogin);
??
перекопано уже много источников по данному вопросу.
2. В указании процедуры базы Oracle надо указать входящие и выходящие переменные связанные со скриптом или все используемые Oracle при обработке данных пришедших из скрипта.
 

Falc

Новичок
1. Совпадение не обязательно, оба варианта правильные.

2. Не понял вопроса :(
 

Nexta

Новичок
2. $dbh=oci_connect('name', 'pass', '//base : port' );
# связывание переменных рнр с переменными оракла
$search_query= "begin portal.GetBalance('$login','$num','$apass','$ip',: o_ret,: o_bal ); end;";
$Statement=oci_parse($dbh,$search_query);
$test=ocinewdescriptor($dbh,OCI_D_LOB);
#сваяли дескриптор
ocibindbyname($Statement,': o_ret', $errors);
ocibindbyname($Statement,': o_bal', $test,-1, OCI_B_CLOB);
# результат похождений в оракле
ociexecute ($Statement, OCI_DEFAULT);
#само выполнение запроса
if (isset ($alogin))
{
print('<b>Статистика для лицевого счета №'.$login.'</b><br/>');
}
else
{
print('<b>Статистика для номера телефона &nbsp;'.$num.'</b><br/>');}
$ss=oci_fetch_all($Statement,$statistica,0,-1,OCI_ASSOC);
print_r($statistica);
ocifreestatement($Statement);
ocilogoff ($dbh);

Ругается на несовпадение типов в первой строке :-(
помогите ошибку найти
 

Adelf

Administrator
Команда форума
$search_query= "begin portal.GetBalance('$login','$num','$apass','$ip',: o_ret,: o_bal ); end;";
Для начала запомни что никаких e('$login','$num','$apass','$ip', быть больше не должно. Все должно идти через биндинг переменных.

Скажи какую именно ошибку он говорит.
 

Nexta

Новичок
Автор оригинала: Adelf
Для начала запомни что никаких e('$login','$num','$apass','$ip', быть больше не должно. Все должно идти через биндинг переменных.

Скажи какую именно ошибку он говорит.
исправила. $search_query= "begin portal.GetBalance:) p_account,: p_phone,: p_pass, : p_ip, : o_ret,: o_bal); end;";
описала все переменные через ocibindbyname
благодаря совету и после жесткой прописки типов переменных в скрипте, ошибка исчезла.
теперь такой вопрос возник как распечатать результат полученный в результате работы процедуры базы?
обычный способ print($string); не срабатывает
 

Adelf

Administrator
Команда форума
Ну я не телепат.. пытаться сейчас понять как именно у тебя все работает. Возможно так:
PHP:
$search_query= "begin :res := portal.GetBalance(: p_account,: p_phone,: p_pass, : p_ip, : o_ret,: o_bal); end;";
.....
ocibindbyname($Statement,':res', $res, 2000);

ociexecute ($Statement, OCI_DEFAULT);

print $res;
А может быть и не так :) Я же не знаю в какую переменную возвращается у тебя результат.
 

Nexta

Новичок
Oracle оказывается захотел увидеть после
ociexecute ($Statement, OCI_DEFAULT);
oci_commit :)
спасибо за помощь
работает замечательно :)
 
Сверху