Eroare supplied argument is not a valid MySQL result

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
claUdiu
Mesaje:313

Eroare supplied argument is not a valid MySQL result

Am si eu o problema.... Am urmatorul cod:

Cod: Selectaţi tot

<?php
ERROR_REPORTING(E_ALL | E_STRICT);
if (!session_is_registered('email')){
header("location: ../../login.php");
}

include("../../config.php");

mysql_connect("$db_host", "$db_user", "$db_pass") or die(mysql_error());
mysql_select_db("$db_name") or die(mysql_error());

if(!isset($_GET['nr'])){ 
    $nr_friend = "10";
} else { 
    $nr_friend = $_GET['nr'];
} 

if(!isset($_GET['by'])){ 
    $by = "ASC";
} else { 
    $by = $_GET['by'];
} 
 
$select = mysql_query("SELECT * FROM friends WHERE friend_with = '".$_SESSION["email"]."' AND accept = '1'ORDER BY '$by' 

LIMIT '$nr_friend' ");
$rows = mysql_num_rows($select);

echo "<center>";
echo '<h2> My Friends (<font color="red"> '.$rows.' </font>)</h2>';
echo "</center>";

while ($afis = mysql_fetch_assoc($select)){

$select2 = mysql_query("SELECT * FROM users WHERE email = '".$afis["invite_by"]."' ORDER BY '$by' LIMIT '$nr_friend'");

while ($afis2 = mysql_fetch_assoc($select2)){

if ($rows == 0){
echo "You don't have any friend";
}
else{

echo '<table>
<tr>

<td><font size="1pt"><a href="../profile.php?uid='.$afis2['id'].'"><img src="../../'.$afis2['avatar'].'" width = "100" height 

= "100" /></a></font></td><td align="left"><font size="5">'.$afis2['first_name'].' '.$afis2['last_name'].'<br>'.$afis2

['age'].' years hold <br> '.$afis2['country'].' <br> Bio: '.$afis2['description'].'</font></td>
</tr><tr>
<td><font size="1pt"></font></td><td align="right"></td>
</tr><tr>
<td align="center" colspan="2">
<br>
</tr>
</table>';
echo "<br />";
echo "<br />";

}
}
}
?>
Am doua inputuri care trimite tot la aceasi pagina u nnr...si ASC sau DESC... Ok..Camd trimit primesc in aceasi pagina si fac select din db dupa $nr_friend si dupa $by Doar ca...imi da doua errori la mysql_num_rows() si la mysql_fetch_assoc():

Cod: Selectaţi tot

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/hosting/gamestime/4friends.hi2.ro/account/friends/friends.php on line 116

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/hosting/gamestime/4friends.hi2.ro/account/friends/friends.php on line 122
Din ce cauza este oare? Pls... Ms mult!!
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

Wayn3 Mesaje:111
Codul postat de tine are doar 68 de linii.. nu am de unde sa stiu ce are..

claUdiu Mesaje:313
Ideea este ca linia 122 este:

Cod: Selectaţi tot

while ($afis = mysql_fetch_assoc($select)){
si linia 116:

Cod: Selectaţi tot

$rows = mysql_num_rows($select);
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo Mesaje:4343
Eroarea aceea apare de obicei cand rezultatul de la MySQL e false, iar functiile mysql_fetch_assoc() si mysql_num_rows() nu lucreaza cu argument False.
Inainte de a aplica aceste functii este indicata verificarea rezultatului, daca e cumva False sa afiseze eroarea. Formula e cam asa:

Cod: Selectaţi tot

$sql = "SELECT `rand` FROM `tabel` WHERE 'conditie'";
$result = mysql_query($sql);
// daca exista eroare, o afiseaza, altfel, prelucreaza datele primite
if (mysql_errno()) echo 'Eroare: '. mysql_error();
else {
  $rows = mysql_num_rows($result);
  // daca sunt randuri returnate, le proceseaza. Altfel, 0 randuri
  if($rows>0) {
    while ($rand = mysql_fetch_assoc($result)) {
      // prelucrare
    }
  else echo '0 randuri returnate';
  }
}
 
Ca sa verifici ce comanda e trimisa la MySQL (cand da eroare, si ajuta in descoperirea cauzei), testeaza cu:

Cod: Selectaţi tot

echo $sql;

claUdiu Mesaje:313
Scuze dar nu vad butonul Edit..

Am sters tot codul si am bagat doar asta in mysql:

Cod: Selectaţi tot


SELECT * FROM friends WHERE friend_with = 'klaus.clau.56@gmail.com' AND accept = '1' ORDER BY asc

Si imi da o eroare la ORDER BY asc:

Cod: Selectaţi tot


#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'asc LIMIT 0, 30' at line 1


Am intrat pe toate site-urile si arata al fel asa cum am facut eu..Care sa fie problema...?Ms de ajutor!!!
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo Mesaje:4343
Dupa ORDER BY cred ca trebuie adaugat numele coloanei dupa care ordonezi.
Daca coloana "accept" e de tip numeric (cum ar fi INT), valoarea transmisa ei trebui fara ghilimele (cu ghilimele e receptionata ca sir).
Nu stiu daca asta e cauza, incearca asa:

Cod: Selectaţi tot

SELECT * FROM `friends` WHERE `friend_with`='klaus.clau.56@gmail.com' AND `accept`=1 ORDER BY `friend_with` ASC

claUdiu Mesaje:313
Multumes pentru raspuns!

Nu era problema la accept = 1 pentru ca fara ORDER By ASC mergea. Adica...Cu LIMIT

Am facut cum ai spus tu, de ex: ORDER BY "invite_by" ASC-DESC si merge!!

PS: Are ceva daca eu nu folosesc INT la baza de date?
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

MarPlo Mesaje:4343
claUdiu scrie:Are ceva daca eu nu folosesc INT la baza de date?
Din ce am mai citit, comenzile SQL in care la WHERE sunt trecute verificari de coloane de tip numar (TINYINT, INT) sunt procesate mai repede.
Verificarile numerice sunt mai rapide decat pe siruri.
Cam atat, ca se deviaza de la subiectul /problema topic-ului.

Subiecte similare