|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-07-20 14:16 UTC] a dot bodemer at brillux dot de
Description:
------------
Hallo,
we use a Linux/Apache/Oracle/PHP on a X86 system.
We tested the Codesample on PHP 5.1.4 with Oracle 8.1/10.1 and Apache 2.0.46/2.0.58. Every times the same result, a memory dump from the current apache.
Reproduce code:
---------------
<?php
$query= "declare
n_status NUMBER(2);
begin
n_status := -1 ;
IF :n_status = 0 THEN
:retValue := :n_status;
END IF;
end;";
$conn = OCILogon("wws", "wws", "zente");
$stmt = OCIParse($conn, $query);
OCIBindByName($stmt, ":retValue", $returnValue,50);
OCIBindByName($stmt, ":n_status", $n_status,50);
$ret=OCIExecute($stmt);
print "\n<pre><br>OCIExecute() ret=$ret";
print "\n<br> Return Value=".$returnValue;
?>
Expected result:
----------------
The return value must be NULL.
Actual result:
--------------
The result is a memory dump from the current apache.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 10:00:01 2025 UTC |
Tony you shouldn't need a stack dump for this. Just try a var_dump($returnValue) at the end of the script. Because no value has been returned in the variable it is being treated as a 64K string and printing garbage. The workaround for users is to make sure that the PL/SQL block always sets variable values in all possible code paths. Something like: $query= "declare n_status NUMBER(2); begin :retValue := 0; -- set default value n_status := 1 ; IF :n_status = 0 THEN :retValue := :n_status; END IF; end;";