Errore mysql_result()

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Da un paio dis ettimane circa ho acquistato uno spazio su aruba e da allora tutti i miei script mi danno quest'errore

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

e la riga di riferimento è sempre questa

PHP:
$var= mysql_result($result,"id");

e lo stesso errore me lo dà su mysql_numrows

qualcuno sa dirmi eprchè si comporta così, precisando che lo script lo esegue correttamente semplicemente segnala quest'errore

grazie
 
A me quell'errore capita quando sbaglio a scrivere le query e vanno in errore

Forse è un problema di connessione al db
 
A no scusa ho visto male,

non dovrebbe comunque pretendere 3 parametri?

mysql_result($result, $row, $field);
 
A no scusa ho visto male,

non dovrebbe comunque pretendere 3 parametri?

mysql_result($result, $row, $field);

non so se è obbligatorio il secondo parametro ma non credo dato che prima di aruba funzionava tutto, cioè anche ora funziona perchè los cript fa tutto quello che deve fare solo che appare quest'errore.

e cmq mi da lo stesso errore quando vado a verificare le righe della query con mysql_numrows solo che invece di darmi

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

mi risulta

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

ho pensato semplicemente ad una diversa versione di php che magari aruba usa una più aggiornata che èla 5.5 se non erro ma vedendo dal manuale nessuno diq uesti due comandi risulta deprecato.
 
Adesso che ricordo ho avuto lo stesso problema quando ho aggiornato php

non so da che versione ma il secondo parametro di mysql_result è diventato obbligatorio

la sintassi del secondo è mysql_num_rows

ma forse va in errore a causa del primo
 
Adesso che ricordo ho avuto lo stesso problema quando ho aggiornato php

non so da che versione ma il secondo parametro di mysql_result è diventato obbligatorio

la sintassi del secondo è mysql_num_rows

ma forse va in errore a causa del primo

bè avevo provato con mysql_num_rows ma nadava in errore lo stesso, però resta strano che la query funge perfettamente.

cmq io estrggo il dato così

PHP:
$sqlquery = "SELECT id FROM tabella WHERE user='pippo' '";
$result = mysql_query($sqlquery);
$idleague = mysql_result($result,"id");

in questo caso come lo inserisco il secondo parametro?

c'è un metodo più semplice per estrarre i dati?
 
Il secondo parametro si riferisce al numero della riga che estrai, nel tuo caso la riga è una sola quindi devi mettere 0

PHP:
$sqlquery = "SELECT id FROM tabella WHERE user='pippo' '";
$result = mysql_query($sqlquery);
$idleague = mysql_result($result,0,"id");

C'è un apice singolo in piu nella tua query dopo 'pippo'
 
Il secondo parametro si riferisce al numero della riga che estrai, nel tuo caso la riga è una sola quindi devi mettere 0

PHP:
$sqlquery = "SELECT id FROM tabella WHERE user='pippo' '";
$result = mysql_query($sqlquery);
$idleague = mysql_result($result,0,"id");

C'è un apice singolo in piu nella tua query dopo 'pippo'

si è un erore di copia incolla quell'apice. cmq alla fine ho trovato l'errore e mi spaice deluderti ma non c'entra niente il secondo parametro.

Semplicemente non avevo inserito la connessione al database. Difatti isnerendo al connessione al database anche senza il secondo parametro non dà più l'errore.

Ora pensavo che in realtà avrebbe dovuto dare l'errore di mancata connessione al database. Quindi penso che il motivo sia questo:

In questo script i file cono richimaati/inclusi tramite require ed include. ora in unod ei file principali richiamo un dato nel database 1 mentre nel file che mi dava l'errore(che è richiamato dal principale) chiamo un dato nel databse 2, quindi aveva la connessione aperta nel database 1 ed effettuava la query in quel database

Ora credo sia questa una mia grossa lacuna che non chiudo mai la connessione al database nei vari file, il che credo vada fatto. Ho imparato così ed ho sempre continuato in questa maniera perciò chiedo

Se chiudo la connessione predente perdo le variabili?

come chiudo la connessione?
 
A me mysql_result() in locale senza il secondo parametro non funziona

Codice:
Warning: mysql_result() expects parameter 2 to be long, string given in C:\wamp\www

Apache Version : 2.2.17
PHP Version : 5.3.4
MySQL Version : 5.1.53

non capisco :confused:
 
ciao
mysql_close($connessione);

dai un occhio qui
http://it2.php.net/manual/en/function.mysql-close.php

tra l'altro usualmente non è necessario perche la connessione si chiude quando finisce lo script

avevo trovato mysql_close(); e stavo usando proprio questa sintassi perchè alla connessione non assegno nessuna variabile

cioè in sostanza apro la connessione così
PHP:
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");

poi effetto la query e dopo penso di chiuderla così

mysql_close();

quindi mi sa ch enon la chiude.

Che emtodo potrei usare dato che se apro entrambi i database poi lo script non capice da dove estrarre?
 
ciao
a che ne so io se stai usando due database
PHP:
<?php
$link1 = mysql_connect($host1, $user1, $pass1);
mysql_select_db("data_base_uno", $link1);
$link2 = mysql_connect($host2, $user2, $pass2);
mysql_select_db("data_base_due", $link2);
//qui puoi fare le query alle tabelle di entrambi
//......
//con
mysql_close($link1);//chiudi il data_base_uno
//qui puoi fare le query solo alle tabelle del data_base_due
//....
mysql_close($link2);//chiudi il data_base_due
//mentre con
//mysql_close();//li chiudi entrambi
?>
esempio io su aruba (li danno standard) ho cinque db (anche se poi in pratica ne uso uno solo) chiamati generalmente Sqlxxxx_1, Sqlxxxx_2 ....... stesso ost e pass ma diverso user quindi ho usato quel sistema (molto raramente) e funzia
 
ciao
a che ne so io se stai usando due database
PHP:
<?php
$link1 = mysql_connect($host1, $user1, $pass1);
mysql_select_db("data_base_uno", $link1);
$link2 = mysql_connect($host2, $user2, $pass2);
mysql_select_db("data_base_due", $link2);
//qui puoi fare le query alle tabelle di entrambi
//......
//con
mysql_close($link1);//chiudi il data_base_uno
//qui puoi fare le query solo alle tabelle del data_base_due
//....
mysql_close($link2);//chiudi il data_base_due
//mentre con
//mysql_close();//li chiudi entrambi
?>
esempio io su aruba (li danno standard) ho cinque db (anche se poi in pratica ne uso uno solo) chiamati generalmente Sqlxxxx_1, Sqlxxxx_2 ....... stesso ost e pass ma diverso user quindi ho usato quel sistema (molto raramente) e funzia

ciao borgo
sotto tuo consiglio ho rpeso anche io aruba e mi hanno dato 5 database solo che per avere un ordine su quello che sto facendo ho il Sqlxxxx_1 per il sito ed il forum ed il Sqlxxxx_2 per il mio script che eprò deve comunicare con il Sqlxxxx_1

proverò questo tuo sistema così perlomeno è più ordinato

ti faccio sapere

thank
 
Allora riprendo questo topic perchè ho capito dove nasce l'errore.

Intanto ti ringrazio per le indicazioni sul tuo sistema per la connessione a più database che è oro per quelloc he devo fare poi tornando in argomento cerco di spiegarmi

io di devo fare delle verifiche nelle righe delle tabelle e prima del passaggio ad aruba tutto funzionava a meraviglia ad esempio epr verificare se tizio era inserito in una tabella usavo ils eguente codice

PHP:
$sqlquery = "SELECT id FROM $tabella WHERE user='$utente'";
$result = mysql_query($sqlquery);
$id= mysql_result($result,"id");

poi facevo una serie di verifiche

del tipo ad esempio
PHP:
if(empty($id)){
l'utente non è iscritto;
}else{
l'utente è iscritto;
}

fin qui tutto ok

ora ocn il passaggio ad aruba in rpatica quando la variabile è vuota mis egnala l'errore in mysql_result.

In pratica non avrebbe più senso l'empty perchè la query va in errore prima non trovando risultati. ora quasi tutto il mio script è basato su una serie del genere di verifiche come posso reimpostare il tutto?

Se io dovessi prima di inziiare verificare che una riga esista nel database come fare dato che se non trova la riga va in errore sia con mysql_result che con mysql_num_rows?

Preciso che se la riga esiste quest'errore non si presenta ma effettua correttamente sia mysql_result che mysql_num_rows
 
ciao
non credo proprio che dipenda da aruba.
per prima cosa fai
PHP:
<?php
//.......
$sqlquery = "SELECT id FROM $tabella WHERE user='$utente'";
var_dump($sqlquery);
$result = mysql_query($sqlquery);
var_dump($result);
$id= mysql_result($result,"id");
//....
?>
con il primo var_dump vedi se la querystringa viene compilata come deve essere,
con il secondo (sopratto se la querystringa è ok): se ti da FALSE hai un errore da qualche parte (la query non viene eseguita), se RESOURCE... la query è andata a buon fine, qundi l'errore è dopo
comunque ho un dubbio: prima nei post precedenti dicevi che usavi due db e che quindi facevi due mysql_select_db, se stai usando due (o più) db
nella mysql_query devi indicare il db, altrimenti come sa php in quale db si trova la tabella, se la tabella si trova nel db "data_base_uno" devi indicarlo
PHP:
$result = mysql_query($sqlquery, $link1);
non serve indicaro se usi un unico db
poi io generelmente uso msql_num_rows es.
PHP:
<?php
//.... se usi un unico db
$sqlquery = "SELECT id FROM $tabella WHERE user='$utente'";
$result = mysql_query($sqlquery);
if(mysql_num_rows($result)>0){
	echo "l'utente esiste";
}else{
	echo "l'utente non esiste";
}
//....
?>
 
borgo sei veramente un GRANDE

grazie

so statos tupido a non pensare al var_dump

la query era ok l'errore era in result ed aveva ragione anche ciric il secondo parametro è obbligatorio ma non il terzo, anche se non ho capito il perchè dello 0 cmq lo studierò

e usando l'if con mysql_rows è nadato a meraviglia

thank :fonzie:
 

Discussioni simili