php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #25123 ocierror() returns always ORA-24315 illegal attribute type
Submitted: 2003-08-18 00:58 UTC Modified: 2004-01-16 03:29 UTC
Votes:2
Avg. Score:5.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:1 (50.0%)
From: karel dot miarka at issa dot cz Assigned:
Status: Closed Package: OCI8 related
PHP Version: 4CVS-2003-12-15 OS: Windows 2000
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: karel dot miarka at issa dot cz
New email:
PHP Version: OS:

 

 [2003-08-18 00:58 UTC] karel dot miarka at issa dot cz
Description:
------------
ocierror() function:
1) returns ORA-24315 illegal attribute type
 after any error. For example ociexcute() prints the valid error in notice, but calling ocierror returns always ORA-24315 illegal attribute type:

Warning: OCIStmtExecute: ORA-00942: table or view does not exist in c:\www\ocierror_bug.php on line 20

ocierror($stmt): Array ( [code] => 24315 [message] => ORA-24315: illegal attribute type [offset] => 17 [sqltext] => ) 1
 
2) doesn't return the sqltext item in the error array

The bug is in all PHP 4.3.x Windows versions.

3) invalid error offset returned

Reproduce code:
---------------
<?php

  echo '<h1>PHP ocierror() bug</h1>';

  $conn = ocilogon('user', 'passwd', 'host');

  // execute error BEGIN
  $stmt = ociparse($conn, "SELECT xyz12345 FROM no_table123");
  ociexecute($stmt);
echo 'ocierror($stmt): ', print_r(ocierror($stmt)), '<br />';
  ocifreestatement($stmt);
  // execute error END

  ocilogoff($conn);

?>

Expected result:
----------------
Warning: OCIStmtExecute: ORA-00942: table or view does not exist in c:\www\ocierror_bug.php on line 20

ocierror($stmt): Array ( [code] => 942 [message] => ORA-00942: table or view does not exist [offset] => 22 [sqltext] => SELECT xyz12345 FROM no_table123) 1

Actual result:
--------------
Warning: OCIStmtExecute: ORA-00942: table or view does not exist in c:\www\ocierror_bug.php on line 20

ocierror($stmt): Array ( [code] => 24315 [message] => ORA-24315: illegal attribute type [offset] => 17 [sqltext] => ) 1

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-08-29 08:44 UTC] guenter_doge at web dot de
Could not reproduce this with PHP 4.3.3 & IIS 5.0 & win 2k & Oracle 8.1.7

One guess: Disable tracing in Oracle ("Set Autotrace Off") and try again.
 [2003-08-29 09:13 UTC] karel dot miarka at issa dot cz
I use Apache/1.3.24 for Windows 95/NT, and Oracle8 Release 8.0.5.0.0 - Production on Linux, but it behaves the same also under Oracle 8.1 for Windows.

Autotrace seems to be SQL*plus feature only and in addition it seems to be off by default.

The ocierror() behaves fine under PHP 4.2 on Windows. 
And there is no problem with ocierror() on Linux with PHP 4.3.3 .

I have reported this bug on "PHP 4.3.x" and someone else has changed this my line to "4.3.3RC5-dev, 5.0.0b2-dev" so I guess this "unknown" person is a PHP-OCI8 developer who reproduced this error with those PHP version.
 [2003-09-22 03:47 UTC] cjbj at hotmail dot com
Does not reproduce for me with PHP 4.3.3 on W2K using Oracle 9.2.0.1.

Re SET AUTOTRACE, this is SQL*Plus specific and produces a simple tuning report

I discovered PHP's OCI8 internal debug output can be enabled by calling ociinternaldebug(1).  Maybe this will help
the filer?
 [2003-12-15 09:37 UTC] karel dot miarka at issa dot cz
Our Oracle server version is 8.0.5.0.0 , so maybe that's the problem, but it was working fine with older versions of php.
 [2003-12-15 16:55 UTC] sniper@php.net
Try the ociinternaldebug(1); like suggested by cjbj at hotmail dot com 

 [2003-12-16 09:00 UTC] karel dot miarka at issa dot cz
Output of the "reproduce code" (see below) when ociinternaldebug(1) called first:

OCIDebug: _oci_open_server new conn=0 dname=xyz
OCIDebug: _oci_open_session new sess=3 user=xyz123
OCIDebug: oci_do_connect: id=4
OCIDebug: oci_parse "SELECT xyz12345 FROM no_table123" id=5 conn=4

Warning: ociexecute(): OCIStmtExecute: ORA-00942: table or view doesn't exist in c:\www\tests\ocierror.php on line 10
ocierror($stmt): Array ( [code] => 24315 [message] => ORA-24315: illegal attribute type [offset] => 21 [sqltext] => ) 1
OCIDebug: START _oci_stmt_list_dtor: id=5 last_query="SELECT xyz12345 FROM no_table123"
OCIDebug: END _oci_stmt_list_dtor: id=5
OCIDebug: START php_rshutdown_oci
OCIDebug: END php_rshutdown_oci
OCIDebug: START _oci_conn_list_dtor: id=4
OCIDebug: nothing to do..
OCIDebug: END _oci_conn_list_dtor: id=4
OCIDebug: START _oci_close_session: logging-off sess=3
OCIDebug: START _oci_close_server: detaching conn=2 dbname=xyz
 [2004-01-13 03:44 UTC] karel dot miarka at issa dot cz
Still invalid. There's maybe problem between the Oracle 8.1 Windows client and the Oracle 8.0 Linux server, because it works fine on Linux.

4.3.5RC2-dev
PHP ocierror() bug
OCIDebug: _oci_open_server new conn=0 dname=xxx
OCIDebug: _oci_open_session new sess=3 user=yyy
OCIDebug: oci_do_connect: id=4
OCIDebug: oci_parse "SELECT xyz12345 FROM no_table123" id=5 conn=4

Warning: ociexecute(): OCIStmtExecute: ORA-00942: tabulka nebo pohled neexistuje in c:\www\tests\ocierror.php on line 12
ocierror($stmt): Array ( [code] => 24315 [message] => ORA-24315: neplatn? typ atributu [offset] => 21 [sqltext] => ) 1
OCIDebug: START _oci_stmt_list_dtor: id=5 last_query="SELECT xyz12345 FROM no_table123"
OCIDebug: END _oci_stmt_list_dtor: id=5
OCIDebug: START php_rshutdown_oci
OCIDebug: END php_rshutdown_oci
OCIDebug: START _oci_conn_list_dtor: id=4
OCIDebug: nothing to do..
OCIDebug: END _oci_conn_list_dtor: id=4
OCIDebug: START _oci_close_session: logging-off sess=3
OCIDebug: START _oci_close_server: detaching conn=2 dbname=xxx
 [2004-01-15 10:22 UTC] tony2001@php.net
It seems, that this is not PHP bug,
http://users.pandora.be/jbosman/jbsql/ - this page says, that "If you get "ORA-24315: illegal attribute type" every time you get another Oracle error, then  you don't have the Oracle 8i home as your primary Oracle home. Use the Oracle Home Selector to change it".
I'm not able to check if this is true, 'cause there is no such old Oracle around. Check it, plz.
 [2004-01-16 03:29 UTC] karel dot miarka at issa dot cz
Oracle Home Selector said:
"There is only one (1) Oracle home defined on this machine and, therefore, this tool cannot change your primary Oracle home."


> You're using WinNT/2000 and multiple oracles, am I right?

Yes and no.
I'm using W2K and I have only one Oracle 8.1 server + client installed localy.
But I usually use only the client for connections to a Linux server with Oracle 8.0.5.0.0.

Now, I have tried to run the error-test script against the local Oracle version, but the results is still the same ORA-00942 warning is printed, but ORA-24315 is reported by ocierror().


Ok guys, lets close this "bug" it is probably only a local problem of my computer configuration or the older Oracle versions.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu May 02 04:01:30 2024 UTC