Passare un valore a php dalle stored procedures

giovedì 01 novembre 2007 - 15.37

pino8314 Profilo | Newbie

Come da titolo, qualcuno sa darmi qualche dritta su come ottenere un valore in php da delle stored procedures....

esempio
eseguo una insert dalla stored procedure(non le stored function)e dopo aver effettuato l'inserimento del db reperisco, attraverso LAST_INSERT_ID(), l'id dell'ultima insert....ma come faccio a passarlo alla pagina php che esegue la stored procedure?

alx_81 Profilo | Guru

>Come da titolo, qualcuno sa darmi qualche dritta su come ottenere
>un valore in php da delle stored procedures....
Ciao, dopo averti fatto (s)postare su questo link, ho controllato qui e là..
e qualcosa ho trovato..
http://it.php.net/manual/it/ref.pdo.php

parla di pdo, per poter chiamare stored procedure anche con parametri di output..


prima di metà pagina si legge:

"Esempio 10. Calling a stored procedure with an input/output parameter
<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000);

// call the stored procedure
$stmt->execute();

print "procedure returned $value\n";
?> "

prova e facci sapere..
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

pino8314 Profilo | Newbie

grazie per la risposta, in questo forum ci sono persone molto cordiali, grazie veramente...

adesso veniamo a noi....alla fine ho risolto in 'un altro modo, vi posto un piccolo esempio che potrebbe essere utile a qualcun altro


Procedura

DELIMITER $$

DROP PROCEDURE IF EXISTS `prova`.`esegui` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `esegui`(OUT param INT)
BEGIN
START TRANSACTION;
insert into pp(val)values('4');
insert into pp_2(val)values('4');
SET param = LAST_INSERT_ID();
COMMIT;
END $$

DELIMITER ;


come potete vedere ho impostato un valore di output nella procedura

`esegui`(OUT param INT)

valore che setto dopo aver inserito la mia insert, infine da php


//richiamo la procedura attribuendo una variabile che mi servira per ottenere il valore di ritorno

$call = "call esegui(@n);";
$query = mysql_query($call);


//prendo il valore di ritorno
$call = "select @n";
$s = mysql_query($call);

eseguendo la query soprastante non faccio altro che creare una tabella virtuale con una colonna che si chiama @n. Come per tutte le normali select, per reperire le righe della select stessa, eseguo un

$r = mysql_fetch_assoc($s);

infine stampo il valore

echo $r['@n'];

alx_81 Profilo | Guru

>grazie per la risposta, in questo forum ci sono persone molto
>cordiali, grazie veramente...
>
>adesso veniamo a noi....alla fine ho risolto in 'un altro modo,
>vi posto un piccolo esempio che potrebbe essere utile a qualcun
>altro
E questo è il passo successivo, che ci perde un po' in prestazioni ma che prima o poi avremmo raggiunto, ok. Se riesci usa il parametro di output. Altrimenti, ottimo lavoro!
ciao e grazie per il complimenti al forum
Alx81 =)

http://blogs.dotnethell.it/suxstellino

pino8314 Profilo | Newbie

perchè secondo te ci perde in prestazioni?

alx_81 Profilo | Guru

>perchè secondo te ci perde in prestazioni?
perchè esegui più istruzioni, passando da una tabella viruale..
invece, leggere la LAST_INSERT_ID è un'istruzione veloce e che fa il sistema in una sola chiamata..
ma è del tutto trascurabile.. è solo per fare il pignolo
Alx81 =)

http://blogs.dotnethell.it/suxstellino
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5