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

  • Автор темы Автор темы Nexta
  • Дата начала Дата начала

Nexta

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

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

2. Не понял вопроса :(
 
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);

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

Скажи какую именно ошибку он говорит.
 
Автор оригинала: 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); не срабатывает
 
Ну я не телепат.. пытаться сейчас понять как именно у тебя все работает. Возможно так:
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;

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