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

  • Creatore Discussione Creatore Discussione ans66
  • Data di inizio Data di inizio

ans66

Utente Attivo
27 Ago 2011
158
0
16
Non riesco proprio a capire dove sia l'errore anche dopo aver consultato piu' volte le guide dei comandi usati. Mi spieghero' meglio mostrando il codice:

Funzione:

PHP:
<?php 

function connDatabase($query) {


$link = mysql_connect("localhost", "utente", "passw");
if (!$link)
  {
  die('connessione a Mysql non riuscita!: ' . mysql_error());
  }
  
  else 
{

//connessione a database
   $db_selected =mysql_select_db("database",$link);
   if (!$db_selected)
  {
  die('connessione al database non riuscita!: ' . mysql_error());
  }
  
  //qui viene passata la query
  else { 
  
   
   
   // passa query
   $result = mysql_query($query,$link) or die(mysql_error()." ".$query);
   //return $result;
   
   
   if ($result===FALSE) { return '';} 
   else 
   { 
   //$row = mysql_fetch_row($result); - ho provato anche $row = mysql_fetch_row($result); ma ho lo stesso errore
   //$darest = $row[0]; 
   //return $darest;                    
   
   $riga = mysql_fetch_array($result, MYSQL_NUM);
   return $val= $riga[0];
    
   }
    
   mysql_close($link);

       } 
   


}
                              }
?>

Query Select/Insert che passo:

PHP:
<?php 
// Trova ID Da Combo
$SelIdVolv="Select volvenza.idvolvenza From volvenza Where volvenza.volvenza = '".$Volvenza."'";
$IdVolv=connDatabase($SelIdVolv);

$SelIdDiametro="Select diametro.iddiametro From diametro Where diametro.diametro = '".$Diametro."'";
$IdDiametro=connDatabase($SelIdDiametro);

$SelIdRuota="Select tiporuota.idtiporuota From tiporuota Where tiporuota.tiporuota = '".$TipoRuota."'";
$IdRuota=connDatabase($SelIdRuota);

$SelIdPortata="Select portata.idportata From portata Where portata.portata = '".$Portata."'";
$IdPortata=connDatabase($SelIdPortata);

$SelIdSupp="Select tiposupporto.idtiposupporto From tiposupporto Where tiposupporto.tiposupporto = '".$TipoSupporto."'";
$IdSupp=connDatabase($SelIdSupp);

$SelIdSerieS="Select seriesupporti.idseriesupporti From seriesupporti Where seriesupporti.seriesupporti = '".$SerieSupporti."'";
$IdSerieS=connDatabase($SelIdSerieS);

$SelIdLam="Select tipolamiera.idtipolamiera From tipolamiera Where tipolamiera.tipolamiera = '".$TipoLamiera."'";
$IdLam=connDatabase($SelIdLam);

$SelIdPav="Select tipopavimenti.idtipopavimenti From tipopavimenti Where tipopavimenti.tipopavimenti = '".$TipoPavimenti."'";
$IdPav=connDatabase($SelIdPav);

// Inserisci dati nella Tabella dimensionesupporto - dimensione piastra e interassi foro varchar altri double 
$queryinsDimSup="INSERT INTO dimensionesupporto (altezza, disassamento, dimensionipiastra, interassiforo, ";
$queryinsDimSup=$queryinsDimSup."spessorepiastra, larghezzaforca, spessoreforca, forocentrale, foroasse, freno) ";
$queryinsDimSup=$queryinsDimSup."VALUES (".$alt.",".$disas.",'".$dimpiast."','".$intforo."',".$spespiast.",";
$queryinsDimSup=$queryinsDimSup.$largforc.",".$spesforc.",".$foroc.",".$foroas.",'".$freno."')";

$conDB=connDatabase($queryinsDimSup);
if (!$conDB) { die('Errore nella connessione!');}

else {

// Select per Trovare Id Tabella dimensionesupporto
$SeldimsupId="Select dimensionesupporto.iddimensionesupporto From dimensionesupporto Where ";
$SeldimsupId=$SeldimsupId."(dimensionesupporto.altezza =".$alt.") Or ((dimensionesupporto.disassamento =".$disas. " Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.dimensionipiastra = '".$dimpiast."' Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.interassiforo = '".$intforo."' Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.spessorepiastra =".$spespiast." Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.larghezzaforca =".$largforc." Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.spessoreforca =".$spesforc." Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.forocentrale =".$foroc." Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.foroasse = ".$foroas." Or ";
$SeldimsupId=$SeldimsupId."dimensionesupporto.freno = ".$freno."))";

 

$dimsupId=connDatabase($SeldimsupId);


// Select per inserimento nella tabella Trovaruota
$queryinsTrova="INSERT INTO trovaruota (codice, descrizione, industriale, diametroid, portataid, seriesupportiid, ";
$queryinsTrova=$queryinsTrova."tipolamieraid, tipopavimentiid, tiporuotaid, tiposupportoid, volvenzaid, linkfoto, linknote, ";
$queryinsTrova=$queryinsTrova."linkpdf, linkdwg, linkdisegno3,linkdisegno4,dimensionesupportoid)";  
$queryinsTrova=$queryinsTrova."VALUES ('".$codice."','".$descrizione."',".$industBoolean.",".$IdDiametro.",";
$queryinsTrova=$queryinsTrova.$IdPortata.",".$IdSerieS.",".$IdLam.",".$IdPav.",".$IdRuota.",".$IdSupp.",";
$queryinsTrova=$queryinsTrova.$IdVolv.",'".$linkfoto."','".$linknote."','".$linkpdf."','".$linkdwg."','".$linkdis3."','";
$queryinsTrova=$queryinsTrova.$linkdis4."',".$dimsupId.")";

$conDbInsTrova=connDatabase($queryinsTrova);
                                                                         

}

?>

prima di chiedere aiuto ho tentato in ogni modo di capire da solo dove sbagliavo ma senza successo.

Grazie:o:o:o
 
Succede spesso questo errore e per la maggior parte dei casi è senza senso.
Ora non ricordo precisamente quando viene fuori (forse quando c'è come risultato un insieme vuoto).

Con mysqli o pdo risolvi sicuramente il problema.
 
ciao
intanto proverei a scrivere le query
PHP:
<?php
//......
// Trova ID Da Combo
$SelIdVolv="Select volvenza.idvolvenza From volvenza Where volvenza.volvenza = '".$Volvenza."'";
$IdVolv=connDatabase($SelIdVolv); 
//.....
?>
in questo modo (non mi sembrano join) mettendo un var_dump (poi da toglierle) per verificarle
PHP:
<?php
//....
// Trova ID Da Combo
echo "<pre>";//anche questo poi da togliere
$SelIdVolv="SELECT idvolvenza FROM volvenza WHERE volvenza='$Volvenza'";
var_dump($SelIdVolv);
$IdVolv=connDatabase($SelIdVolv);
//analogo per tutte le altre SELECT.....
echo "</pre>";//anche questo poi da togliere
//...
?>

@longo
si è meglio passare a mysqli o alla pdo, però non è detto che risolva se le querystringa sono sbagliate lo sono in tutti i casi
 
ciao
una domanda: quando ti da l'errore, per caso quando fai l'insert?

si capita esattamente con la prima query insert.

In effetti dopo essermi consultato in rete ho visto che mysql_query restituisce FALSE nel caso non si tratti di una query SELECT ed io ho cercato di intercettare questo caso con if ($result===FALSE) { return '';} come puoi vedere nel codice che segue:


PHP:
$result = mysql_query($query,$link) or die(mysql_error()." ".$query);

if ($result===FALSE) { return '';} 
   else 
   { 
   //$row = mysql_fetch_row($result);
   //$darest = $row[0]; 
   //return $darest;                    
   $riga = mysql_fetch_array($result, MYSQL_NUM);
   return $val= $riga[0];
    
   }
 
ciao
intanto proverei a scrivere le query
PHP:
<?php
//......
// Trova ID Da Combo
$SelIdVolv="Select volvenza.idvolvenza From volvenza Where volvenza.volvenza = '".$Volvenza."'";
$IdVolv=connDatabase($SelIdVolv); 
//.....
?>
in questo modo (non mi sembrano join) mettendo un var_dump (poi da toglierle) per verificarle
PHP:
<?php
//....
// Trova ID Da Combo
echo "<pre>";//anche questo poi da togliere
$SelIdVolv="SELECT idvolvenza FROM volvenza WHERE volvenza='$Volvenza'";
var_dump($SelIdVolv);
$IdVolv=connDatabase($SelIdVolv);
//analogo per tutte le altre SELECT.....
echo "</pre>";//anche questo poi da togliere
//...
?>

@longo
si è meglio passare a mysqli o alla pdo, però non è detto che risolva se le querystringa sono sbagliate lo sono in tutti i casi

ciao e grazie per la risposta.

ho visto e comprendo il significato di var_dump($SelIdVolv); quello che non capisco e' echo "<pre>" e echo "</pre>" che ho trovato in rete e serve a preservare spazi ecc ma non comprendo l'utilita' in questo caso.

In ogni caso provero' a correggere come mi hai detto
 
ciao
un'altra piccola cosa, perchè fai così?
PHP:
return $val= $riga[0];
se devi ritornare il valore di $riga[0]
basta
PHP:
return $riga[0];
 
grazie per l'informazione. Ci tenevo a precisare che per la creazione delle query ho utilizzato FlySpeed SQL Query.
 
ciao
un'altra piccola cosa, perchè fai così?
PHP:
return $val= $riga[0];
se devi ritornare il valore di $riga[0]
basta
PHP:
return $riga[0];

si hai ragione questo e' un errore. purtroppo nei vari tentativi che ho fatto per trovare una soluzione mi sa che mi sono un po' perso!
 
non capisco il motivo per cui dopo aver modificato il mio codice con var_dump e <pre> vedo le query select con un apice di troppo. Comunque persiste l'errore. mostro di seguito il risultato delle query e l'errore:

Codice:
string 'SELECT idvolvenza FROM volvenza WHERE volvenza='boccola'' (length=56)
Resource id #4
string 'Select diametro.iddiametro From diametro Where diametro.diametro = '80to100mm'' (length=78)
Resource id #5
string 'Select tiporuota.idtiporuota From tiporuota Where tiporuota.tiporuota = 'AnelloGomma'' (length=85)
Resource id #6
string 'Select portata.idportata From portata Where portata.portata = '50to60kg'' (length=72)
Resource id #7
string 'Select tiposupporto.idtiposupporto From tiposupporto Where tiposupporto.tiposupporto = 'PiastraGirevole'' (length=104)
Resource id #8
string 'Select seriesupporti.idseriesupporti From seriesupporti Where seriesupporti.seriesupporti = 'Xline'' (length=99)
Resource id #9
string 'Select tipolamiera.idtipolamiera From tipolamiera Where tipolamiera.tipolamiera = 'Lamierazincata'' (length=98)
Resource id #10
string 'Select tipopavimenti.idtipopavimenti From tipopavimenti Where tipopavimenti.tipopavimenti = 'PavimentoPiastrelle'' (length=113)
Resource id #11
1
( ! ) Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\database\insruote.php on line 56
Call Stack
#	Time	Memory	Function	Location
1	0.0028	431296	{main}( )	..\insruote.php:0
2	0.0248	443712	connDatabase( )	..\insruote.php:178
3	0.1599	443872	mysql_fetch_array ( )	..\insruote.php:56
Errore nella connessione!
 
Ciao, in fase di sviluppo è molto utile usare la funzione mysql_error(), da quello che ti viene restituito è più facile risalire al problema
PHP:
if (!$result) {
    echo "Errore query : " . $query . "<br/>" . mysql_error();
}
edit
visto che l'errore è nella insert dovrai modificare quel przzo di codice
PHP:
$conDB = connDatabase($queryinsDimSup);
if (!$conDB) {
    echo "Errore query : " . $queryinsDimSup . "<br/>" . mysql_error();
    die();
}
 
Ultima modifica:
ho provato a verificare le variabili passate inserendo degli echo ma non ci sono apici nelle variabili passate:

Codice:
80to100mmboccola

string 'SELECT idvolvenza FROM volvenza WHERE volvenza='boccola'' (length=56)
Resource id #4
string 'Select diametro.iddiametro From diametro Where diametro.diametro = '80to100mm'' (length=78)
Resource id #5
string 'Select tiporuota.idtiporuota From tiporuota Where tiporuota.tiporuota = 'AnelloGomma'' (length=85)
Resource id #6
string 'Select portata.idportata From portata Where portata.portata = '50to60kg'' (length=72)
Resource id #7
string 'Select tiposupporto.idtiposupporto From tiposupporto Where tiposupporto.tiposupporto = 'PiastraGirevole'' (length=104)
Resource id #8
string 'Select seriesupporti.idseriesupporti From seriesupporti Where seriesupporti.seriesupporti = 'Xline'' (length=99)
Resource id #9
string 'Select tipolamiera.idtipolamiera From tipolamiera Where tipolamiera.tipolamiera = 'Lamierazincata'' (length=98)
Resource id #10
string 'Select tipopavimenti.idtipopavimenti From tipopavimenti Where tipopavimenti.tipopavimenti = 'PavimentoPiastrelle'' (length=113)
Resource id #11

a questo punto ho il timore che l'errore possa essere nella prima parte dove acquisisco delle variabili POST quindi inserisco anche la prima parte:

PHP:
$codice = $_POST['codice'];  
$descrizione = $_POST['descrizione'];
$alt = $_POST['altezza'];
$disas = $_POST['disassamento'];
$dimpiast = $_POST['dimpiastra'];
$intforo = $_POST['intforo'];
$spespiast = $_POST['spespiastra'];
$largforc = $_POST['largforca'];
$spesforc = $_POST['spesforca'];
$foroc = $_POST['forocen'];
$foroas = $_POST['foroasse'];

$freno=$_POST['freno'];

if (isset($_POST['freno'])) {$freno=TRUE;} else {$freno=FALSE;} 

       
$applicazione = $_POST['applicazione'];  
$comeRuota = $_POST['comeRuota']; 
$TipoRuota = $_POST['TipoRuota'];  
$Diametro = $_POST['Diametro'];
echo $Diametro; 
$Portata = $_POST['Portata'];
$TipoSupporto = $_POST['TipoSupporto'];
$SerieSupporti = $_POST['SerieSupporti'];
$TipoLamiera = $_POST['TipoLamiera'];
$TipoPavimenti = $_POST['TipoPavimenti'];
$Volvenza=$_POST['Volvenza'];
echo $Volvenza; 

$linkfoto=$_POST['linkfoto'];
$linknote=$_POST['linknote'];
$linkpdf=$_POST['linkpdf'];
$linkdwg=$_POST['linkdwg'];
$linkdis3=$_POST['linkdis3'];
$linkdis4=$_POST['linkdis4'];



// Boolean $industBoolean=FALSE di Default (cioe' Collettivita') x inserimento su Tabella Trovaruota
$industBoolean=FALSE;
if ($_POST['applicazione']='Industriali'){ $industBoolean=TRUE;}
else { $industBoolean=FALSE;}


$queryins='';
 
ho capito che il secondo apice era legato al fatto che nella stampata c'era la definizione

string 'query' per cui vedo due apici...mi ero confuso...scusatemi!

Sto cambiando il codice come mi ha detto ciric cosi' posso analizzare la query insert
 
adesso mi e' chiaro che l'errore e' nella query insert tabella dimensionesupporto:

Codice:
Errore query : INSERT INTO dimensionesupporto (altezza, disassamento, dimensionipiastra, interassiforo, spessorepiastra, larghezzaforca, spessoreforca, forocentrale, foroasse, freno) VALUES (120,15,'95x80','80x60',2,44,3,12,8,'1')

ho appurato che l'inserimento nella tabella dimensionesupporto avviene ma poi si verifica l'errore...non capisco proprio..

campi tabella:

iddimensionesupporto int(11) No
altezza double No
disassamento double No
dimensionipiastra varchar(20) No
interassiforo varchar(20) No
spessorepiastra double No
larghezzaforca int(11) No
spessoreforca double No
forocentrale double No
foroasse double No
freno tinyint(1) No
 
ho risolto il problema modificando come segue:

PHP:
// passa query
   $result = mysql_query($query,$link) or die(mysql_error()." ".$query);
   //return $result;
   
   if (!is_resource($result)) { return '';} 
   else 
   { 
   //$row = mysql_fetch_row($result);
   //$darest = $row[0]; 
   //return $darest;                    
   $riga = mysql_fetch_array($result, MYSQL_NUM);
   return $riga[0];
 
ciao
una domanda: nella tabella dimensionesupporto e anche nelle altre dove definisci l'id, hai messo che l'id sia primarykey autoincrement?
in quello che hai scritti vedo che gli hai dato solo int(11)
 
ciao
una domanda: nella tabella dimensionesupporto e anche nelle altre dove definisci l'id, hai messo che l'id sia primarykey autoincrement?
in quello che hai scritti vedo che gli hai dato solo int(11)

si ho messo l'ID primarykey autoincrement e gli ho dato solo int(11).

Ho la sensazione che l'errore era dovuto semplicemente al fatto che non intercettavo la variabile che scaturiva dalla query insert e per questo motivo mi dava l'errore quando mysql_fetch_array non trovava una resource. Ho risolto verificando se la variabile in uscita non era una resource (!is_resource) e in questo caso ho forzato l'uscita dalla funzione con un return con valore della variabile in uscita a mio piacimento.

Onestamente credevo che nel caso di una query Insert ottenessi sempre una variabile con valore False dalla mysql_query ma sicuramente mi sbagliavo
 

Discussioni simili