Solved

Get value by calling oracle function in PHP!

Posted on 2008-09-30
16
1,853 Views
Last Modified: 2013-12-18
I create php page to bind the value in oracle function named balance1
2 codes are below .
My question is  How to i get the value that is returned by oracle and display it .
PHP code :

 

<?php

$conn = oci_connect('abc', 'test', 'test');

$sql  = ' begin balance1(:cardnumber); end; ';

$stmt = oci_parse($conn,$sql);

 

oci_bind_by_name($stmt,':cardnumber',$cardnumber,32);

 

$cardnumber = '5xxxxxxxxxxxxx';

oci_execute($stmt);

?>

 

oracle function :

create or replace function balance1(v_cardnumber in varchar2 )

return varchar2

is

....

return

end balance1;

Open in new window

0
Comment
Question by:dinhchung82
  • 9
  • 4
  • 2
16 Comments
 
LVL 15

Expert Comment

by:Shaju Kumbalath
Comment Utility
i think u should remove the line
$cardnumber = '5xxxxxxxxxxxxx';

and
add on eline after oci_execute
print "$cardnumber\n";
 
 
0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
$cardnumber = '5xxxxxxxxxxxxx';

This is the value that i pass to the ":cardnumber "

I cannot remove it
Thanks!

0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
I try to change Function balance 1 to Procedure balance

Definition for balance :

create or replace procedure balance(v_cardnumber in varchar2,trnamntstr out varchar2 ) is
.....
end balance

and the Php i change is :

<?php
$conn = oci_connect('aaa', 'bbb', 'test') or die('Cannot connect') ;
$sql  = 'BEGIN balance(:cardnumber,:trnamntstr); END;';
$stmt = oci_parse($conn,$sql);

oci_bind_by_name($stmt,':cardnumber',$cardnumber,32);
oci_bind_by_name($stmt,':trnamntstr',$trnamntstr,32);

$cardnumber = '5212345678991111';
oci_execute($stmt);
print "$trnamntstr\n";
?>


But the output is nothing ?
Would anybody have idea ?

0
 
LVL 15

Expert Comment

by:Shaju Kumbalath
Comment Utility
CHECK WHETHER THE PROCEDURE IS GIVING PROPER OUTPUT by executing it in sqlplus;
 set serveroutput on
decare
v_output varchar2(100);
begin
 balance( '5212345678991111',v_output );
dbms_output.put_line(v_output);
end;
 
 
0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
yes, the balance is okie and return the result .
But when call it from PHP page , i cannot receive the expected result.
Thanks
0
 
LVL 15

Accepted Solution

by:
Shaju Kumbalath earned 400 total points
Comment Utility
try adding  '&' in the following statements
 
oci_bind_by_name($stmt,':cardnumber',&$cardnumber,32);
oci_bind_by_name($stmt,':trnamntstr',&$trnamntstr,32);

 
0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
I try this but nothing returns !!!!

<?php
$conn = oci_connect('abc', 'abc', 'test') or die('Cannot connect') ;
$sql  = 'BEGIN balance(:cardnumber,:trnamntstr); END;';
$stmt = oci_parse($conn,$sql);

oci_bind_by_name($stmt,':cardnumber',&$cardnumber,32);
oci_bind_by_name($stmt,':trnamntstr',&$trnamntstr,32);

$cardnumber = '52131111111111';
oci_execute($stmt);
print "$trnamntstr\n";

?>
0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 
LVL 15

Expert Comment

by:Shaju Kumbalath
Comment Utility
try this
use double quotes inseted of single quotes
oci_bind_by_name($stmt,":cardnumber",&$cardnumber,32);
oci_bind_by_name($stmt,":trnamntstr",&$trnamntstr,32);


0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
The same ! :(
0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
Do you have any idea?
0
 
LVL 48

Assisted Solution

by:hernst42
hernst42 earned 100 total points
Comment Utility
Have you tried as SQL
$sql  = 'balance1(:cardnumber)';
Or have you read http://www.php.net/manual/en/function.oci-new-cursor.php
0
 
LVL 5

Author Closing Comment

by:dinhchung82
Comment Utility
Thanks for all!
0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
Hi hernst 42,
I folow your help , read the link and try new code.
By chance , i realize i have mistake when key in :cardnumber value
Wrong value makes nothing display.
and i don't know why and continue asking the experts :(
I am careful to input the value so the result display with the expected value.

Hi shajukg,
Your help is okie and run!
Thanks so much for your effort!

I am really sorry due to stupid typing that waste your time !
0
 
LVL 48

Expert Comment

by:hernst42
Comment Utility
additional note:
the & might not be needed if you correctly define the variables before usage. So this might also work if you want to try. Would be intersting to know if that also works.
$conn = oci_connect('abc', 'abc', 'test') or die('Cannot connect') ;

$sql  = 'BEGIN balance(:cardnumber,:trnamntstr); END;';

$stmt = oci_parse($conn,$sql);
 

$cardnumber = '52131111111111';

$trnamntstr = null;

oci_bind_by_name($stmt,':cardnumber',$cardnumber,32);

oci_bind_by_name($stmt,':trnamntstr',$trnamntstr,32);
 

oci_execute($stmt);

print "$trnamntstr\n";

Open in new window

0
 
LVL 5

Author Comment

by:dinhchung82
Comment Utility
hi hernst42,
You are correct !
It also works!
I forget to post it because i said that the error is due to my typing ....
you are great!
0

Featured Post

Easy Project Management (No User Manual Required)

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
This article discusses four methods for overlaying images in a container on a web page
This video shows syntax for various backup options while discussing how the different basic backup types work.  It explains how to take full backups, incremental level 0 backups, incremental level 1 backups in both differential and cumulative mode a…
This video shows how to copy an entire tablespace from one database to another database using Transportable Tablespace functionality.

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now