Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Nadpobudliwy warning: mysql_fetch_array(), czyli temat z cyklu "co jest źle"
messmaker
post
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 5
Dołączył: 5.12.2008

Ostrzeżenie: (0%)
-----


Witam,

Przychodzę z dziwną przypadłością, a mianowicie:

W tabeli productionlist są przechowywane dane odnośnie właśnie przetwarzanych surowców (tak, chodzi o grę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ). Kolumna togo odpowiada za ilość tur do zakończenia produkcji.

Wklejony poniżej kod jest wykonywany przy każdej turze. Z założenia powinien najpierw zmniejszać licznik togo o 1 a w momencie, kiedy ten osiągnie zero ma dodać surowce graczowi. pięć linijek niżej wykonuję niemal identyczny kod (jedyną różnicą jest nazwa tabeli) i odbywa się to bezproblemowo, ale tutaj:

Cytat
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\_WebServ\httpd\turn.php on line 29


Takie oto ostrzeżenie widzę za każdym razem, kiedy ma nastąpić dodanie surowca (czyli togo osiąga 0). Żeby było śmieszniej surowiec ZOSTAJE DODANY w bazie danych.

W telegraficznym skrócie: Wywala warning, ale całość wykonuje poprawnie. Jak pozbyć się ostrzeżenia?

  1. <?php
  2. 27      $togo = doquery(&#092;"UPDATE {{table}} SET togo=togo-1 WHERE togo>0 AND type='building' AND itemid='\".$building[\"id\"].\"'\", \"productionlist\");
  3. 28      $productions2 = doquery(&#092;"SELECT * FROM {{table}} WHERE type='building' AND itemid='\".$building[\"id\"].\"' AND togo='0' ORDER BY id ASC\", \"productionlist\");
  4. 29      while ($production2=mysql_fetch_array($productions2)) {
  5. 30              //dodanie surowca
  6. 31      }
  7. ?>

Dodałem numery linii według pliku.
Powód edycji: [Spawnm] Przeniosłem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Ludzie troche myslenia.

Cytat
mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Co to oznacza? Ze przekazany argument ($productions2) nie jest prawidlowym wynikiem zapytania select do mysql.

A skad sie $productions2 wzielo?
z
  1. <?php
  2. $productions2 = doquery("SELECT * FROM {{table}} WHERE type='building' AND itemid='".$building["id"]."' AND togo='0' ORDER BY id ASC", "productionlist");
  3. ?>

A co robi doquery() - domyslam sie ze to samo co mysql_query().
Zagladamy do manuala mysql_query" title="Zobacz w manualu PHP" target="_manual
Cytat
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

WOW, ta funkcja zwraca czasem FALSE.

Teraz wypada sprawdzic czemu zwraca FALSE zamiast wyniku SELECTa.

1. echo mysql_error() // Returns the text of the error message from previous MySQL operation
2. i printujemy zapytanie ktore wysylamy do bazki


  1. <?php
  2. $sql = "SELECT * FROM {{table}} WHERE type='building' AND itemid='".$building["id"]."' AND togo='0' ORDER BY id ASC", "productionlist";
  3. echo($sql);
  4. $productions2 = doquery($sql);
  5. ?>


i z reszta radzimy sobie samodzielnie.


A czemu ci dodaje? Bo to select nie dziala, update wykonuje sie widocznie prawidlowo.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 10:05