Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Chiamare una Stored Procedure da PHP

    Ciao.

    Nel mio file php metterei:
    Codice PHP:
    $q "CALL scriviLog(".$_SESSION['user'].",'".$_SERVER['REMOTE_ADDR']."',".$oID.",8);";
    echo 
    $q;
    if(!
    mysql_query($q,$conn))
         die(
    "   AAARGHHH!"); 
    la mia procedura (che funziona dal query analizer!!) è questa
    Codice PHP:
    DROP PROCEDURE IF EXISTS `scriviLog` $$
    CREATE DEFINER=`root`@`localhostPROCEDURE `scriviLog`(IDUtente int,IPUtente varchar(15),IDStrutt int,IDAzione int)
    BEGIN

    DECLARE TitoloStrutt varchar(150);
    DECLARE 
    NomeUtente varchar(50);

    SELECT titolo into TitoloStrutt FROM struttura WHERE id_struttura IDStrutt;
    SELECT nome into NomeUtente FROM utenti WHERE id_utente IDUtente;

    INSERT INTO accessi(data_accutenteIPtitolo_struttid_struttid_azione)
    VALUES (NOW(), NomeUtenteIPUtenteTitoloStruttIDStruttIDAzione);

    END $$

    DELIMITER 

    Sono forse impazzito o ho sbagliato qualcosa?? se la eseguo mi dice AAARGHHH!!! e infatti non aggiorna il DB.

    Dove sbaglio??
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  2. #2
    Cercando qua e là ho trovato che l'estensione mysqli permette l'uso delle stored proc.

    ma siccome io il mio cms in php l'ho già pronto da tempo e sto aggiungendo nuove features... si potrebbe evitare l'uso di mysqli?? Non ho tanta voglia di riscrivere tutto il codice sorgente... non so se mi spiego
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  3. #3
    in ogni caso le stored procedure le puoi chiamare tramite SQL quindi basta sistemare la sintassi

  4. #4
    Le tue parole sono incoraggianti... ma mi manca ancora il "come" cambiare la sintassi.

    Qualcuno sa dove sia il mio errore?
    Eppure con mysql_query ("call sproc($params)) dovrei essere a posto? No?
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  5. #5
    mmm, stavo approfondendo l'argomento e mi sa che il problema deriva non tanto da PHP ma dal fatto che l'estensione php_mysql.dll è compilata verso una vecchia release di mysql con il risultato che le stored procedure potrebbero non funzionare correttamente

    per toglierti il dubbio dovresti provare a richiamare una stored procedure con MySQLi però usando sempre la sintassi SQL

    ---
    update
    ---

    ho trovato frugando sul web questo thread


    l'ultimo tipo dice che senza usare le connessioni persistenti e passando 131074 come client_flags a mysql_connect è riuscito a far funzionare il tutto
    http://www.usenet-forums.com/php-lan...ql-5-php4.html

    Quel valore corrisponde alla costante mysql CLIENT_MULTI_RESULTS (costante che non è definita in php)

    Dalla pagina
    http://dev.mysql.com/doc/refman/5.0/...l-connect.html

    c'è messo che
    *** CLIENT_MULTI_RESULTS
    Tell the server that the client can handle multiple result sets from multiple-statement executions or stored procedures. This flag is automatically enabled if CLIENT_MULTI_STATEMENTS is enabled. See the note following this table for more information about this flag.

    *** CLIENT_MULTI_STATEMENTS
    Tell the server that the client may send multiple statements in a single string (separated by “;”). If this flag is not set, multiple-statement execution is disabled. See the note following this table for more information about this flag.
    Puoi provare cosi se si risolve il problema ma devi fare svariati test perché con questo giochino è possibile lanciare più query con un solo comando mysql_query che da una parte comporta magari l'abilitazione delle stored procedure dall'altra parte se presente un bug nella validazione dei dati in ingresso è possibile dropparti/svuotarti le tabelle con estrema facilità!!!!!!!

  6. #6
    Grazie delle preziose informazioni...

    purtroppo o per fortuna pare che la sintassi non c'entrasse nulla!
    Infatti, debuggando a dovere, ho scoperto che la procedura non veniva eseguita poiché l'utente non godeva di permessi di EXECUTE.

    Tutto qua.

    Ora funziona che è un bijoux!

    Prossimo passo: Transactions.
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.