Joomla.it Forum
Non solo Joomla... => Sviluppo => : tavvolley 12 May 2010, 12:04:27
-
salvea tutti!
ho fatto la seguente stored procedure:
delimiter //
create procedure insertFile (
in orginalNamePass varchar(50)
,in statePass varchar(45)
,in deletedPass TINYINT(1)
,in estensione varchar(4)
,in sizePass int
,in realNamePass varchar(50)
,out risposta varchar(45)
,out avviso varchar(100) )
begin
select ID into risposta
from jos_typedocument
where extension = estensione;
if risposta is null then
insert into jos_file(originalName, state, deleted, typeDocumentID, size, realName)
values (originalNamePass, statePass, 0, 0, sizePass, realNamePass);
set avviso ='estensione sconoscita, e query ultimata';
else
insert into jos_file(originalName, state, deleted, typeDocumentID, size, realName)
values (originalNamePass, statePass, 0, risposta, sizePass, realNamePass);
set avviso ='estensione riconosciuta, e query ultimata';
end if;
end//;
delimiter;
è stata testata in mysql e funziona ora vorrei richiamarla in joomla. Come posso ottenere i risultati della stored?
l'altra che utilizzo funziona ma non ho messo parametri di output ed è stata richimata col seguente codice:
$query = 'call miaStored('.$this->ID.')';
$this->_db->setQuery($query);
$this->_db->query();
ora dovrei cambiare il modo della chiamta?
potrebbe aiutarmi qualcuno?
Vi ringrazio in anticipo!!
-
ciao,
ci sono un po' di cose che non mi quadrano:
1.
chiami la procedura insertFile e poi chiami miaStored (ma forse è solo l'esempio)
2.
il numero ed il tipo dei parametri non concordano
3.
sicuro che si possa usare set? io ho sempre usato select into.
per il resto mi sembra ok, anche se personalmente ritengo che il tipo di controllo sarebbe più opportuno a livello di bl che non di db.
ciao,
marco
-
ti ringrazio della risposta!!
scusa la mia ignoranza ma cosa intendi con a livello bl :-[!!
vai sicuro che ho chiamato la stored per bene, quello era solo un esempio.
la stored postata funziona solo che richiamandola in quel modo ottengo che la variabile che la contiene forse è un boolean.
chiarisco meglio:
io ho messo il seguente codice:
<?php
function inserimento(){
$query='call insertFile(....);';
$this->_db->setQuery($query);
$rispValue=$this->_db->query();
return $rispValue;
}
if(!$this->inserimento()){
$this->setError($this->_db->getErrorMsg());
return false;
}
?>
in effetti esegue la stored ma il risultato è solo true o false a seconda se la stored è eseguita o meno e non restituisce nessun altro valore quindi penso che la variabile $rispValue sia un boolean.
Se volessi ottenere i valori delle variabili di output della stored come dovrei fare ?
se riuscissi a leggere i valori di output mi farei restuire l'id del record appena inserito ;D.
ho tentanto a mettere all'interno della stored anche
SELECT risposta, avviso ;
alla fine dell'IF (dopo end if;)
se la eseguo da mysqlAdmin ok mi restituisce il rigo ma io vorrei leggerlo in joomla!!
I dati che passo sono già controllati, quindi vorrei sapere se il db genera errore, infatti sto cercando informazioni sulla gestione degli errori di mysql, mi piacerebbe trovare qualcosa come il throws di java che propagasse l'errore su tutto in questo caso penso dovrebbe essere catturato dal metodo getErrorMsg().
-
bl = business logic, hai ragione a volte dovrei essere meno criptico.
il metodo query() restituisce l'esito dell'operazione, non il risultato dalla stessa.
vedi docs.joomla.org/JDatabase per i metodi di accesso al recordset restituito (es loadObject)
SELECT LAST_INSERT_ID() INTO risposta;
ciao,
marco
-
si in effetti sbagliavo a richiamare la stored!! bastava solo mettere loadObject!!
esattamente ho dovuto mettere nella stored:
...
end if;
SELECT risposta, avviso;
end;
e richiamarla nel codice in questo modo:
$query = 'call insertFile('.$this->parametri().')';
$this->_db->setQuery($query);
$this->_db->loadObject();
grazie a tutti in paticolare a marco!! ;D
-
ricordati il [RISOLTO] nel post di apertura...
-
scusa la mia poca praticità di questo forum dovrei modificare l'oggetto del del post oppure esiste un pulsante o qualche procedura da seguire che non conosco? grazie per la pazienza. ;D
-
no problem ;)
devi modificare l'oggetto.
ciao.