En funktion som gör DML kan inte anropas i en SELECT
uttalande oavsett anropsspråk.
Om du vill göra DML och returnera ett värde, skulle det vara mycket mer meningsfullt att skapa en lagrad procedur med en OUT
parameter istället för att använda en funktion. Så det skulle vara mycket mer meningsfullt att
CREATE OR REPLACE PROCEDURE proc_name_return( p_1 IN NUMBER,
p_2 IN NUMBER,
p_ret OUT VARCHAR2 )
AS
BEGIN
p_ret := pkg_tools.replace.site( p_1, p_2 );
END;
och sedan anropar den lagrade proceduren från PHP
$sql = 'BEGIN proc_name_return( :p_1, :p_2, :p_ret ); END;';
Om du inte vill göra det, är min gissning att du kan göra något liknande också (anpassat från ett av skripten på sidan 164 i Underground PHP och Oracle Manual )
<?php
$c = oci_connect('hr', 'hrpwd', 'localhost/XE');
$s = oci_parse($c, "begin :ret :=pkg_tools.replace_site(1121,3343); end;");
oci_bind_by_name($s, ':ret', $r, 200);
oci_execute($s);
echo "Result is: ".$r;
?>