Autor | Zpráva | ||
---|---|---|---|
Jacker Profil * |
#1 · Zasláno: 17. 6. 2007, 11:35:36
pls co znamená to číslo na konci? Vždy mi to píše: Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 1 on MySQL result index 4 in /home/free/hu.cz/k/kos/root/www/tt.php on line 6
$ban = mysql_result(mysql_query("SELECT * FROM ban WHERE ip='".$REMOTE_ADDR."'"), 0); |
||
nightfish Profil |
#2 · Zasláno: 17. 6. 2007, 11:44:19
číst umíme?
|
||
Časová prodleva: 16 dní
|
|||
fisch Profil * |
#3 · Zasláno: 3. 7. 2007, 16:32:31
asi nejspíš taky neumím číst, ale nějak mi nedochází tohle varovaní, přestože mi script funguje... :
Warning: Unknown: 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0 |
||
anode Profil |
#4 · Zasláno: 3. 7. 2007, 23:49:01
fisch: Jaká verze PHP a MySQL? Případně hodil by se kus zdrojáku, se kterým to ještě dělá.
|
||
nightfish Profil |
#5 · Zasláno: 4. 7. 2007, 00:20:35
fisch
to by mohlo být způsobeno tím, že je v php.ini nastaveno mysql.trace_mode=on a zároveň že neuvolňuješ explicitně výsledky dotazů z mysql pomocí mysql_free_result - nutno podotknout, že toto explicitní uvolňování může pomoct při práci s velikými výsledky dotazů, kdy tyto, nejsou-li uvolněny, zabírají zbytečně paměť i poté, co s nimi přestaneme pracovat všechny výsledky mysql dotazů jsou implicitně uvolněny při ukončení skriptu |
||
fisch Profil * |
#6 · Zasláno: 4. 7. 2007, 10:09:46
Děkuji nightfish, bylo to tím, takže teď už se podobný varování nebudou zobrazovat? Ten zdroják je tady.. tak by to šlo teda vylepšit?
$sql = mysql_query("SELECT id,jmeno,obrazek FROM studenti"); echo "<table border="1">"; while ($data = mysql_fetch_array($sql)) echo "<tr><td>".$data[id]. " </td><td> " .$data[jmeno]. " </td><td> " .$data[obrazek]. "</td></tr>" ; echo "</table>"; |
||
nightfish Profil |
#7 · Zasláno: 4. 7. 2007, 12:37:54
fisch
šlo by to vylepšit tak, že třeba za to echo "</table>"; dáš mysql_free_result($sql); |
||
anode Profil |
#8 · Zasláno: 4. 7. 2007, 12:46:26
Pokud to je podobně jednoduchý skript, spíš bych vypnul ten trace_mode. V takovém případě není důvod nevyužít vlastnosti PHP - že na konci běhu skriptu automaticky uvolní všechny zdroje.
|
||
Časová prodleva: 2 měsíce
|
|||
Shogun Profil * |
#9 · Zasláno: 21. 8. 2007, 09:49:03
Kód:
$nm=mysql_result(mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link), 0); Chyba: Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 0 on MySQL result index 8 in /home/free/ic.cz/p/pol/root/www/design/editplayers.php on line 66 Číst umim, ale z manuálu mi to není moc jasné, takže co doplnit místo 0 v mysql_result, aby se mi tam ta hláška nevypisovala a $nm proběho úspěšně? Předem díky. |
||
Alphard Profil |
#10 · Zasláno: 21. 8. 2007, 09:56:12
mysql_error() musí být před jinými dotazy
$nm=mysql_result(mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link), 0); echo mysql_error(); mysql_query("INSERT INTO ... |
||
Shogun Profil * |
#11 · Zasláno: 21. 8. 2007, 10:07:50
Pokud jsem to dobře pochopil, každá mysql_query musí mít svuj echo mysql_error().
Kód je následující, přesto to tu chybovou hlášku vypisuje stále a do databáze (web_log) ne neukládá uživatel, krerý editoval. { |
||
nightfish Profil |
#12 · Zasláno: 21. 8. 2007, 10:09:33
Shogun
problém je v tom prvním řádku - ten dotaz to jméno prostě nevrátí, rozepiš si to: $result = mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link); echo mysql_error(); $nm=mysql_result($result, 0); |
||
Shogun Profil * |
#13 · Zasláno: 21. 8. 2007, 10:17:34
Nic :-(( Stále tam ta chybová hláška je a ani jméno upravujícího se do databáze nepřidá.
else |
||
Alphard Profil |
#14 · Zasláno: 21. 8. 2007, 10:28:10
nemůže, myslím si, že první select neskončí tak, jak očekáváš, ale je záhadou, že to nehlásí syntaktickou chybu, nevím např. jaký datový typ má sloupec id, že porovnáváš v ' ' atd.
zkontroluj výsledky vrácené tímto dotazem |
||
nightfish Profil |
#15 · Zasláno: 21. 8. 2007, 10:30:41
Shogun
proveď ještě jednu úpravu $result = mysql_query($q="SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link); echo $q."<br>"; echo mysql_error(); ... a pak si ten vypsaný dotaz spusť buď v konzoli nebo v phpMyAdminovi a zjistíš, že ti nevrací žádný řádek, tzn. v tabulce `web_users` neexistuje řádek, který by měl id shodné s obsahem proměnné $_SESSION["id"] |
||
Shogun Profil * |
#16 · Zasláno: 21. 8. 2007, 10:34:44
Proměnná $result vyhodí Resource id #8.
Sloupec id má datový typ int(11) a je auto_increment. Offtopic: Ukládám záznamy, kterým se přidělujou id 1,2,3,4,5,6. Potom smažu záznamy 4,5,6 a když tam zase nějaký přidám, tak dostane číslo 7 => id řada je 1,2,3,7. Lze nějak posunou ten auto_increment, aby místo 7 dal opět 4, pak 5, 6 atd.? |
||
Shogun Profil * |
#17 · Zasláno: 21. 8. 2007, 10:38:51
$q vypíše SELECT jmeno FROM web_users WHERE id='11' (pokud edituju uživatele, který má v db id 11.
|
||
Alphard Profil |
#18 · Zasláno: 21. 8. 2007, 10:41:06 · Upravil/a: Alphard
Sloupec id má datový typ int(11) a je auto_increment.
WHERE id='11' takže to nedávej do apostrofů |
||
nightfish Profil |
#19 · Zasláno: 21. 8. 2007, 10:42:03 · Upravil/a: nightfish
Ukládám záznamy, kterým se přidělujou id 1,2,3,4,5,6. Potom smažu záznamy 4,5,6 a když tam zase nějaký přidám, tak dostane číslo 7 => id řada je 1,2,3,7. Lze nějak posunou ten auto_increment, aby místo 7 dal opět 4, pak 5, 6 atd.?
ano, jde to, hledej ve FAQ v tématu Databáze na webu - EDIT: tam je vlastně jenom "setřepávání" id $q vypíše SELECT jmeno FROM web_users WHERE id='11' 1) podívej se do tabulky, zda-li v ní máš záznam s id = 11 2) zkus zrušit ty apostrofy kolem jedenáctky, jak již podotknul kolega Alphard 3) spusť si ten dotaz v konzoli nebo phpMyAdminu |
||
Alphard Profil |
#20 · Zasláno: 21. 8. 2007, 10:42:34
$result = mysql_query("SELECT jmeno FROM web_users WHERE id=".$_SESSION["id"], $link);
echo mysql_error(); $nm=mysql_result($result, 0); echo $nm; |
||
nightfish Profil |
#21 · Zasláno: 21. 8. 2007, 10:43:46
a ještě drobné vylepšení
$result = mysql_query("SELECT jmeno FROM web_users WHERE id=".$_SESSION["id"], $link); |
||
Shogun Profil * |
#22 · Zasláno: 21. 8. 2007, 10:45:50
$q vypíše SELECT jmeno FROM web_users WHERE id=11...
$result vypíše Resource id #8 Stále chyba Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 0 on MySQL result index 8 in /home/free/ic.cz/p/pol/root/www/design/editplayers.php on line 69 Kód: else Do web_log se stále nezapíše jméno. |
||
nightfish Profil |
#23 · Zasláno: 21. 8. 2007, 10:49:35
Stále chyba Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 0 on MySQL result index 8 in
význam té hlášky tady ještě nezazněl, takže hurá do toho: snažíš se pomocí funkce mysql_result přistupovat k řádku 0 výsledku mysql dotazu, avšak tento řádek neexistuje - jsou v zásadě 2 možnosti - buď se dotaz neprovede kvůli chybě (což jsme ale vyloučili, protože mysql_error() nic nevypíše) a nebo se dotaz provede a vrátí 0 řádků (což je tvůj případ) |
||
Shogun Profil * |
#24 · Zasláno: 21. 8. 2007, 10:53:33
echo "Počet řádků výsledku: ".mysql_num_rows($result)."<br>";skutečně vypíše: Počet řádků výsledku: 0 |
||
nightfish Profil |
#25 · Zasláno: 21. 8. 2007, 10:56:35
skutečně vypíše: Počet řádků výsledku: 0
protože to opravdu žádné výsledky nevrátí - možné důvody a způsoby diagnostiky jsou uvedeny v příspěvcích výše |
||
Shogun Profil * |
#26 · Zasláno: 21. 8. 2007, 11:57:37
Tak jsem našel chybu v proměnných kdy se mi navzájem přepisovaly jinými údaji.
Všem mockrát děkuji za pomoc. |
||
Časová prodleva: 17 let
|
0