Помогите разобраться, скипт не выполняется. PHP5.0.5-OCI8-Oracle9i

Pen

Новичок
Помогите разобраться, скипт не выполняется. PHP5.0.5-OCI8-Oracle9i

нижеприведенный скрипт выполняется (в браузере: SUPER count: 2)
PHP:
<?php  
PutEnv("ORACLE_SID=VIDAR");  
PutEnv("ORACLE_HOME=/opt/vendor/oracle/product/9.2.0.1.0");  
PutEnv("TNS_ADMIN=/opt/vendor/oracle");  
if ($c = ocilogon("vidar", "vidar", "vidar")) {  
echo "SUPER" . "\n";  
}  else {  
echo "BAD";  
}    
$s = ociparse($c, "SELECT COUNT(*) FROM TAB1");  
ociexecute($s, OCI_DEFAULT); 
ocifetch($s); 
 print "count: " . ociresult($s, "COUNT(*)");  
ocicommit($c);  
ocilogoff($c);  
?>
а этот скипт (см. ниже) не выполняется (в браузере: пусто)

PHP:
<?php
PutEnv("ORACLE_SID=VIDAR");
PutEnv("ORACLE_HOME=/opt/vendor/oracle/product/9.2.0.1.0");
PutEnv("TNS_ADMIN=/opt/vendor/oracle");
if ($c = ocilogon("vidar", "vidar", "vidar")) {
echo "SUPER" . "\n";
}
else {
echo "BAD";
}

$s = ociparse($c, "SELECT COL1, COL2 FROM TAB1");
ociexecute($s, OCI_DEFAULT);
while (ocifetch($s)) {
print "count: " . ociresult($s, "COL1") . ociresult($s, "COL2") . "\n";
}
ocicommit($c);  
ocilogoff($c);  
?>
Помогите, куда копать?
 

tony2001

TeaM PHPClub
PutEnv("ORACLE_SID=VIDAR");
PutEnv("ORACLE_HOME=/opt/vendor/oracle/product/9.2.0.1.0");
PutEnv("TNS_ADMIN=/opt/vendor/oracle");

Я не знаю кто вам это посоветовал, но смысл в том, что эти переменные нужны Oracle Client'у во время его инициализации, которая происходит ДО того, как putenv() их устанавливает.
Поэтому, это работать не будет, нет. Используйте настоящие переменные окружения, а не putenv, и тем более не SetEnv в Апаче.

>PHP5.0.5
Пора обновиться. Давно пора.
 

Pen

Новичок
tony2001, но без
PutEnv("ORACLE_SID=VIDAR");
PutEnv("ORACLE_HOME=/opt/vendor/oracle/product/9.2.0.1.0");
PutEnv("TNS_ADMIN=/opt/vendor/oracle");
у мнея почему-то не работает :( коннекта нет, вылезают ошибки (_oci_open_server: ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor;
ociparse(): supplied argument is not a valid OCI8-Connection resource и пр.)

и что примечательно, выборка одного поля работает ("SELECT COL1 FROM TAB1"), а двух уже нет ("SELECT COL1, COL2 FROM TAB1"). Т.е. чуть усложнить выборку и все - нет результата.

>пора обновиться
да. это да
 

tony2001

TeaM PHPClub
>Используйте настоящие переменные окружения, а не putenv, и тем более не SetEnv в Апаче.
 

Pen

Новичок
tony2001, спасибо за ответы
у меня Оракл стоит на том же серваке, что и Апач (переменные окружения установлены)
# env | grep ORACLE_HOME
ORACLE_HOME=/opt/vendor/oracle/9.2.0.1.0
# env | grep ORACLE_SID
ORACLE_SID=vidar

теперь я понял,
я могу получить данные из полей типа NUMBER, и не могу из полей типа VARCHAR2.
при попытке получить строковые данные вылезают такие ошибки:
Warning: ocilogon() [function.ocilogon]: _oci_open_server: Error while trying to retrieve text for error ORA-12514 in /usr/local/apache2/htdocs/IITLab/ORACLE/test.php on line 6

Warning: ociparse(): supplied argument is not a valid OCI8-Connection resource in /usr/local/apache2/htdocs/IITLab/ORACLE/test.php on line 13

Warning: ociexecute(): supplied argument is not a valid OCI8-Statement resource in /usr/local/apache2/htdocs/IITLab/ORACLE/test.php on line 14

Warning: ocifetch(): supplied argument is not a valid OCI8-Statement resource in /usr/local/apache2/htdocs/IITLab/ORACLE/test.php on line 18

Warning: ocicommit(): supplied argument is not a valid OCI8-Connection resource in /usr/local/apache2/htdocs/IITLab/ORACLE/test.php on line 34

может кто сталкивался с этим? помогите
прошу сильно не пинать за незнание предмета :)
 

tony2001

TeaM PHPClub
>Error while trying to retrieve text for error ORA-12514
>переменные окружения установлены
может быть где-то и установлены, но Апач их не видит.
иначе не было бы этой ошибки.

и обновиться всё-таки НАДО, а не "хотелось бы".
 

Pen

Новичок
tony2001,
как установить переменные окружения, что бы Апач их увидел?

(либо ссылка на док)
 

tony2001

TeaM PHPClub
прописать их в /etc/profile, например.
или в .bashrc юзера апача.
или в apachectl.
или еще куда-нибудь.
 

Pen

Новичок
tony2001,
в /etc/profile и так прописано,
у юзера Апача нет Bash`a
в apachectl можно конечно прописать, но моя проблема думаю заключается в другом, т.к. коннект до базы есть, можно совершить выборку из базы полей числового типа, но нельзя получить выборку полей типа VARCHAR2.
Мне кажется здесь проблемы с языком(кодировкой)
 

tony2001

TeaM PHPClub
я пока вижу два факта:
1) апач не видит переменных окружения во время старта.
2) ты не обновился.
 
Сверху