Autor Zpráva
zedna
Profil
ahoj zobrazuje se mi chyba a ani tady v diskuzích mi nepomohla jediná rada

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /volume1/web/spanox.cz/backend.php on line 127

na mem serveru se tato chyba zobrazuje a používám mysql 5.1.34, na hostingu se mi chyba ale nezobrazuje a tam je mysql 5.1.52

chyba je někde v tomto kódu

$this->counter++;
	return $this->result;
	}

	function fetch_row($query) {
	$this->result = mysql_query($query);
	$this->row = mysql_fetch_array($this->result);

	$this->counter++;
	return $this->row;
	}

	function fetch_array($query) {
	$this->row = mysql_fetch_array($query);

	return $this->row;
	} 

	function num_rows($query) {
	$this->result = mysql_query($query);
	$this->num_rows = mysql_num_rows($this->result);

	$this->counter++;
	return $this->num_rows;
	}

	function count_queries() {
	return $this->counter;
	}


ale když tam cokoliv změním, tak mi to killne celý script na adrese
můžete poradit v čem by mohla být chyba?

článek to sice vypíše ale někde s chybou a někde bez chyby
Tori
Profil
Neměla by metoda fetch_array vypadat takhle?
  function fetch_array($query) {
    $this->result = mysql_query($query);
    $this->row = mysql_fetch_array($this->result);
    return $this->row;
  } 
zedna
Profil
jo já jsem se do toho už docela zamotal, ale proč to teda někde funguje a někde blbne?
Tori
Profil
Podle chybové hlášky a čísla řádku, co jsem tak zběžně koukla na odkaz, zlobila jen tahle metoda. Když to opravíte, je tam ještě jinde problém?
zedna
Profil
když jsem to opravil, tak se mi pak zobrazila asi na 6 místech
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /volume1/web/spanox.cz/backend.php on line 252



				if(empty($row_super_admin['0'])) {
				$this->super_admin = 0;

					$result_admin_mods = $db->query("SELECT * FROM modules WHERE type = 'admin_module' ORDER BY module ASC");
					while($row_admin_mods = $db->fetch_array($result_admin_mods)) {
					$groups_admin = $db->fetch_row("SELECT groups FROM modules WHERE id = '" . $row_admin_mods['id'] . "'");
					$groups_admin = $groups_admin['0'];

					$groups_admin_array = explode(":", $groups_admin); 
						$x = 0;
						while(!empty($groups_admin_array[$x])) {
						$user_groups = $db->fetch_row("SELECT * FROM users WHERE id = '$this->userid'");
						$user_groups = $user_groups['groups'];

						$user_groups_array = explode(":", $user_groups);
							if(in_array("" . $groups_admin_array[$x] . "", $user_groups_array)) {
							$this->admin = 1;
							}


řádek 252 je ten poslední z tohoto kódu
Tori
Profil
Připadá mi, že ta DB vrstva byla napsaná nekonzistentně: všechny metody fetch_* dostávají SQL dotaz a vrací jeden řádek výsledku, kromě fetch_array, která měla dostat už výsledek z $db->query. Jestli vám to tak vyhovuje, tak jen zkontrolujte všechny výskyty $db->fetch_array, jestli do nich jde řetězec nebo resource (taky nevidím, jak řešíte možnost chyby v dotazu, kdy $db->query vrátí FALSE).

Další varianta je sjednotit to, aby všechny metody fetch_* dostávaly jen SQL dotaz, a doplnit ještě metodu, která dokáže vrátit všechny řádky výsledku (až už naráz jako 2D pole, nebo po jednom v cyklu).
zedna
Profil
tak jsem přišel na ten pravý důvod, bylo to mojí nepozorností, při selectu kategorií jsem omylem přidal jednu podmínku, kterou jsem měl při selectu článků

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0