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

    PHP MySQL transazioni Warning: mysql_query() [function.mysql-query]: Unable to save r

    Ciao,
    sto cercando di realizzare una transazione su due tabelle ma mi si presenta uno strano problema.
    Se tento di eseguire l’operazione “normalmente” funziona tutto correttamente ma quando simulo la contemporaneità di due richieste (nella funzione che realizza la transazione ho inserito un ciclo per allungarne la durata di esecuzione) mentre la prima va a buon fine, la seconda attende (correttamente) che la prima abbia finito ma poi si blocca sulla query
    codice:
     SELECT disp FROM tab1 WHERE id = '" . $cliente . "' FOR UPDATE";
    restituendo

    Warning: mysql_query() [function.mysql-query]: Unable to save result set in

    Ripetendo la singola seconda richiesta dopo qualche secondo funziona tutto correttamente.
    Se tento le stesse operazioni facendo lavorare la transazione solo sulla prima tabella (“eliminando” la parte di codice relativa alla seconda ‘tabelenco’) le due richieste “contemporanee” vengono eseguite tranquillamente.
    Questa la funzione incriminata:

    codice:
    function scala($cliente, $tipo, $connessione)
    {
    	$totale = -1;
    	mysql_query("START TRANSACTION"); 
    	$query = "SELECT disp FROM tab1 WHERE id = '" . $cliente . "' FOR UPDATE";
    	$dbResult = mysql_query($query, $connessione);
    	$AffectedRows = mysql_affected_rows($connessione);
    	if ($AffectedRows > 0)
    	{		
    		$app =  mysql_fetch_row($dbResult);
    		if ($app[0] >= $tipo)
    		{			
    			$codice = 0;
    			$query = "SELECT codice FROM tabelenco WHERE tipo = '" . $tipo . "' AND stato=0";
    			$dbResult = mysql_query($query, $connessione);
    			$AffectedRows = mysql_affected_rows($connessione);	
    			if ($AffectedRows > 0)
    			{
    				$app1 =  mysql_fetch_row($dbResult); 
    				$i=0;
    				while ($i<10000)
    				{
    					$j=0;
    					while ($j<5000)
    					{
    						$j = $j + 1;
    					}
    					$i = $i + 1;
    				}
    				$query = "UPDATE tabelenco SET stato=1 WHERE codice = '" . $app1[0] . "'";
    				mysql_query($query, $connessione);
    				$codice = $app1[0];
    			}
    	
    			if ($codice != 0)
    			{
    				$totale = $app[0] - $tipo;
    				$query = "UPDATE tab1 SET disp=" . $totale . " WHERE id = '" . $cliente . "'";
    				mysql_query($query, $connessione);
    				mysql_query("COMMIT", $connessione);
    				return $totale;				
    				exit ;
    			}
    		}
    	}
    	mysql_query("ROLLBACK", $connessione);			
    	return $totale;
    }
    Ogni suggerimento/consiglio/spiegazione/correzione è più che gradito

  2. #2
    sono molto neofita ma cambia in:

    codice:
    SELECT disp FROM tab1 WHERE id = '$cliente' FOR UPDATE";

  3. #3
    ehm... no.. non credo prorpio possa essere quello il problema, anche perché altrimenti non dovrebbe funzionare nemmeno per le richieste contemporanee su una sola tabella (tra le altre cose proprio quella interessata dalla query) che invece, come ho indicato, vengono soddisfatte correttamente...
    (comunque per scrupolo ci ho provato lo stesso... e non funziona ...)

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.