PHP e recupero risultati da query

  • Creatore Discussione Creatore Discussione liso
  • Data di inizio Data di inizio

liso

Nuovo Utente
18 Mar 2014
10
0
0
Buonasera a tutti, scrivo per la prima volta...perchè per la prima volta non ho trovato la soluzione da solo :)

ho uno script sql NON scritto da me, che devo far eseguire in una pagina php.
se il codice lo copio e incollo in phpmyadmin funziona correttamente e restituisce un risultato.
questo risultato dovrei mostrarlo in una pagina web
ho quindi creato un file .sql con le righe di sql
e utilizzato questa funzione nella pagina php

PHP:
<?php

mysql_connect("localhost","root",""); 
mysql_select_db("db1"); 
$file="query.sql"; // Il file SQL da eseguire 
$rows=explode(";",file_get_contents($file)); 
foreach($rows as $row){ 
echo "<br/>Eseguo la query:".$row; 
$res = mysql_query($row); 
echo "<br/>".$row; 
} 
echo "finito!"; 
echo $res;

if($res && mysql_num_rows($res)>0){
 while($row=mysql_fetch_assoc($res)){
        //echo $row['famiglia']." – ";
        }
} else
     echo "nessun risultato";
	 
	 
?>

Non mi riesce però interpretare il risultato. infatti mi viene stampato "nessun risultato" ma questo non è vero in quanto se eseguito in phpmyadmin ho il risultato.....come posso fare?

l'ultima riga (di una quarantina) di codice sql è: group by Fm3_Cod, Fm3_Des, Art_UniMis;
non so se può essere utile per capire che tipo di risultato sputa fuori


grazie infinite
 
Ultima modifica di un moderatore:
Buonasera a tutti, scrivo per la prima volta...perchè per la prima volta non ho trovato la soluzione da solo :)

ho uno script sql NON scritto da me, che devo far eseguire in una pagina php.
se il codice lo copio e incollo in phpmyadmin funziona correttamente e restituisce un risultato.
questo risultato dovrei mostrarlo in una pagina web
ho quindi creato un file .sql con le righe di sql
e utilizzato questa funzione nella pagina php

Codice:
<?php

mysql_connect("localhost","root",""); 
mysql_select_db("db1"); 
$file="query.sql"; // Il file SQL da eseguire 
$rows=explode(";",file_get_contents($file)); 
foreach($rows as $row){ 
echo "<br/>Eseguo la query:".$row; 
$res = mysql_query($row); 
echo "<br/>".$row; 
} 
echo "finito!"; 
echo $res;

if($res && mysql_num_rows($res)>0){
 while($row=mysql_fetch_assoc($res)){
        //echo $row['famiglia']." – ";
        }
} else
     echo "nessun risultato";
	 
	 
?>

Non mi riesce però interpretare il risultato. infatti mi viene stampato "nessun risultato" ma questo non è vero in quanto se eseguito in phpmyadmin ho il risultato.....come posso fare?

l'ultima riga (di una quarantina) di codice sql è: group by Fm3_Cod, Fm3_Des, Art_UniMis;
non so se può essere utile per capire che tipo di risultato sputa fuori


grazie infinite


stampando direttamente $res quello che viene fuori è: Resource id #6
che vuol dire?!?!?!!?!?:eek:
 
$res è simile ad un array, devi interpretarlo con mysql_fetch_row(). Ti metto due righe di codice

while($row=mysql_fetch_row($res)){
$campo1=$row[0];
$campo2=$row[1];
....
$campon=$row[n];
}

n dipende dal numero di campi che hai nel risultato della query.
 
Ho provato anche così,
Codice:
while ($row = mysql_fetch_row($res)) {
	echo $row[0];
}


while ($row = mysql_fetch_assoc($res)) {
	echo $row[0] ;
}

	 
while ($row = mysql_fetch_array($res, MYSQL_BOTH)) {
	echo  $row[0];
}

ad intepretare il risultato, ma l'errore è:

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in

ma il codice query è corretto, perchè eseguendola in phpmyadmin funziona
 
ciao
scusa una cosa che non ho capito, cosa hai dentro il file query.sql?
una serie di select diverse separate da ;
del tipo esempio:
SELECT * FROM ecc_uno...;SELECT * FROM ecc_due...;SELECT * FROM ecc_tre...
?
spiega meglio cosa hai dentro quel file

p.s.
a parte che dovresti passare a mysqli (le istruzioni mysql sono deprecate) le mysql_fetch_assoc o mysql_fetch_array vanno bene.

ps al p.s.
usate i bccode giusti per il codice, per php ultima delle tre iconcine
 
concordo con borgo, usi un codice ... diciamo "improprio"
includi la query direttamente senza usare il file
ciao
Marino

PHP:
<?php
mysql_connect("localhost","root",""); 
mysql_select_db("db1"); 

$sql = "select campo1, campo2, campo3";
$sql.= ",campo4 .....";
$sql.= ",campoN .....";
$sql.= " from tabella";
$sql.= " where condizione 1";
$sql.= " and condizione 2";
$sql.= " group by Fm3_Cod, Fm3_Des, Art_UniMis";

echo "<br/>Eseguo la query:".$sql; 
$res = mysql_query($sql);
var_dump($res);

if($res && mysql_num_rows($res)>0){
  while($row=mysql_fetch_assoc($res)){
    //echo $row['famiglia']." – ";
  }
} else
     echo "nessun risultato";
?>
 
Ultima modifica:
dentro il file ho 2 select, unite da un UNION...
Codice:
select Fm3_Des as Famiglia, Rmv_Art as Codice, Art_Des as Descrizione, Art_DesUlt as Descrizione_Ulteriore, Art_UniMis,
      ...
 where Fm3_Cod = @Filtro_Fm3
   ...
 group by Rmv_Art, Art_Des, Art_DesUlt, Art_UniMis
 union
 select Fm3_Des as Famiglia, Fm3_Cod as Codice, "" as Descrizione, "Totale" as Descrizione_Ulteriore, Art_UniMis,
       ...
 where Fm3_Cod = @Filtro_Fm3
   ...
 group by Fm3_Cod, Fm3_Des, Art_UniMis;
 
scusa, "cancella" il mio post precedente,

la variabile @Filtro_Fm3 è già presente nel db o viene valorizzata nel testo della query ?
where Fm3_Cod = @Filtro_Fm3

borgo, tu che conosci mysql .....
ciao
Marino
 
Per fare le cose semplici, sto cercando di eseguire solo la prima select,
ho levato il file .sql e riscritto così:

PHP:
$sql = "set @Filtro_Fm3 := 'BR09'"; 
$sql.= "set @Filtro_Dal := '2013-01-01'";
$sql.= "set @Filtro_Al  := '2013-12-31'";
$sql.= "set @Filtro_Ese := 'A13';";


$sql.= "select Fm3_Des as Famiglia, Rmv_Art as Codice, Art_Des as Descrizione, Art_DesUlt as Descrizione_Ulteriore, Art_UniMis,";
$sql.= "       sum(if(Hmv_StaDoc = '1', Rmv_QtaE, 0)) - sum(if(Hmv_StaDoc = '1',Rmv_QtaU,0)) as Totale_Qta_inOrdine,";
$sql.= "       sum(if(Hmv_StaDoc != '1', Rmv_QtaE, 0)) as Totale_Qta_Entrata,";
$sql.= "       sum(if(Hmv_StaDoc != '1', Rmv_QtaU, 0)) as Totale_Qta_Uscita,";
$sql.= "       sum(if(Hmv_StaDoc != '1', Rmv_QtaE, 0)) - sum(if(Hmv_StaDoc != '1',Rmv_QtaU,0)) as Totale_Qta_inGiacenza,";
$sql.= "       sum(Rmv_QtaE)-sum(Rmv_QtaU) as Totale_Qta_Disponibile       ";
$sql.= "  from (((m_Rmv  ";
$sql.= "  left join m_Hmv on m_Hmv.Hmv_IdeHea = m_Rmv.Rmv_IdeHmv)  ";
$sql.= "  left join q_Art on q_Art.Art_Cod = m_Rmv.Rmv_Art)  ";
$sql.= "  left join r_Fm3 on r_Fm3.Fm3_Cod = q_Art.Art_Fm3) ";
$sql.= " where Fm3_Cod = @Filtro_Fm3";
$sql.= "   and Hmv_MagDat >= @Filtro_Dal  ";
$sql.= "   and Hmv_MagDat <= @Filtro_Al  ";
$sql.= "   and Rmv_EseCon = @Filtro_Ese  ";
$sql.= "   and Rmv_MovMag in ('G','D')  ";
$sql.= " group by Rmv_Art, Art_Des, Art_DesUlt, Art_UniMis";


 
 
$res = mysql_query($sql);
echo "<br/>Eseguo la query:".$sql; 


var_dump($res);


while ($row = mysql_fetch_row($res)) {
	echo $row[0];
}


while ($row = mysql_fetch_assoc($res)) {
	echo $row[0] ;
}

niente da fare, il risultato è:
Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given
queste 20 righe postate su phpmyadmin invece producono 3 righe di risultati
 
il problema sta nelle variabili @....
se vuoi una soluzione rapida, sostituisci le variabili nella query con i relativi valori
altrimenti credo ... borgo
ti deve spiegare come gestire query con variabili in mysql
ciao
Marino
 
PERFETTO!!! adesso qualcosa vedo....grazie mille non so come ringraziarvi!
per le variabili provo a studiarci un pò da solo...nel caso non dovessi trovare nulla tornerò a disturbarvi sul forum!


grazie mille davvero
 
PERFETTO!!! adesso qualcosa vedo....grazie mille non so come ringraziarvi!
per le variabili provo a studiarci un pò da solo...nel caso non dovessi trovare nulla tornerò a disturbarvi sul forum!


grazie mille davvero
 

Discussioni simili