• User Newbie

    Richiamare stored procedure mysql da codice php

    Salve a tutti,

    ho creato una stored procedure su mysql che vuole un parametro in ingresso:

    CREATE DEFINER=root@localhost PROCEDURE sp_GetElencoFatture(IN mese_anno varchar(7))
    BEGIN
    SELECT *
    , df.df_prezzo_ * df.df_qta as imponibile
    , (df.df_prezzo_ * df.df_qta) / 100 * df.df_iva as iva
    , df.df_prezzo_ * df.df_qta + ((df.df_prezzo_ * df.df_qta) / 100 * df.df_iva) as tot_fatt
    FROM testfat tf
    inner join detfat df
    on tf.tf_id = df.df_tf_id
    inner join clienti c
    on tf.TF_CLI_ID = c.CLI_ID
    WHERE RIGHT(TF_DATA, 7) = mese_anno
    group by TF_ID,TF_DATA
    order by TF_DATA DESC
    ,TF_ID DESC;

    END

    Da php voglio richiamarla passando il parametro in questo modo:

    $meseanno = '02/2009';
    $rs=mysql_query("CALL sp_GetElencoFatture('".$meseanno."')");

    Ma quando arrivo al punto

    while($row = mysql_fetch_array($rs))
    {
    $IDFattura=$row[TF_ID];
    $NumeroFattura=$row[TF_NUMERO];
    $RIFORDINE=$row[TF_RIFERIM];
    $Data=$row[TF_DATA];
    $SKANNO=substr($row[TF_DATA],6);
    $DesAzienda=$row[CLI_RAGSOC];
    $IDAzienda=$row[TF_CLI_ID];
    $impo=$row[imponibile];
    $iva=$row[iva];
    $tot=$row[tot_fatt];
    }

    sula pagina ricevo questo errore:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

    Ho cercato di capire dove è il problema, ma senza successo.
    Se provo ad inserire in mysql_query la query che si trova nella stored procedure, tutto funziona correttamente, ma la chiamata alla stored invece no.

    Avete idea di cosa sto sbagliando?


  • ModSenior

    Forse perchè non ha nessuna riga? Quindi non riesce a convertilo?


  • User Newbie

    Se per nessuna riga intendi che non c'è nessun dato nella tabella del database, allora non è il mio caso.
    Se eseguo direttamente la SELECT contenuta nella stored procedure all'interno del codice php, sulla pagina ottengo il risultato che mi aspetto.
    E così vorrei che fosse richiemando la stored procedure, ma questa non funziona.


  • User Newbie

    Facendo ulteriori ricerche in rete, ho trovato la soluzione al problema.
    La posto per permettere a chi si trovasse nella stessa situazione di avere a disposizione la soluzione.

    Le stored procedure sono state introdotte dalla versione di MySql 5.0.

    Per tale motivo per richiamarle è necessario usare gli oggetti della libreria php_mysqli.dll invece che della libreria php_mysql.dll.

    Ovviamente tale libreria va prima abilitata nel file php.ini.

    Quindi con l'utilizzo delle librerie giuste, è possibile fare il richiamo alle stored procedure all'interno del codice php.

    Es.:
    $mysqli=new mysqli("nome_host", "nome_utente", "password", "database");
    $rs=$mysql->query("CALL nome_stored_procedure([parametri])");

    while($row=mysqli_fetch_array($rs))
    {
    [...codice php...]
    }

    Mentre in questo caso non funzionerebbe:
    $link= mysql_connect("nome_host","nome_utente","passwprd") or die (mysql_error());
    mysql_select_db("database",$link) or die ("IMPOSSIBILE APRIRE IL DB");

    $rs=mysql_query("CALL nome_stored_procedure([parametri])");
    while($row=mysql_fetch_array($rs))
    {
    [...codice php...]
    }

    generando l'errore 'Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource'.

    Ma queste cose immagino le sapevate già.


  • ModSenior

    Ti ringrazio in anticipo a nome degli altri utenti... 🙂