• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Call to a member function fetch_assoc() on boolean

VPS Starter Arubacloud
0 głosów
2,346 wizyt
pytanie zadane 2 lipca 2015 w PHP przez artimal Gaduła (4,800 p.)

Kto słyszał kto wie?
Wszystko do tej pory działało a teraz zwraca błąd na tej linijce:
 

    $wiersz = $rezultat->fetch_assoc();

Czy wszystko z nią w porządku?

Cały kod:
 

<?php
session_start();
if ((!isset($_SESSION['zalogowany'])) && (!$_SESSION['zalogowany']==true))
{
	header('Location: index.php');
	exit();
}
else
{
	require_once "connect.php";
	$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
	$id = $_SESSION['ID'];
	$rezultat = $polaczenie->query("SELECT * FROM osiagniecia WHERE ID=$id");
    $wiersz = $rezultat->fetch_assoc();
    if($wiersz['punkty']>0)
    {
    	header('Location: mathmaster.php');
    	$polaczenie->close();
		exit();
    }
}
?>

 

2 odpowiedzi

+3 głosów
odpowiedź 2 lipca 2015 przez Schizohatter Nałogowiec (39,600 p.)
wybrane 2 lipca 2015 przez artimal
 
Najlepsza

Błąd

Call to a member function fetch_assoc() on boolean

Oznacza, że zmienna, na której wywołałeś tę metodę jest typu boolean (true/false). W tym przypadku jest to nieoczekiwane, ponieważ powinna być obiektem mysqli. No, możemy się domyśleć, że raczej to nie jest true, bo i skąd, więc na 99.99% jest to false.

False bierze się stąd, że:

a) zostało nieprawidłowo nawiązane połączenie z bazą MySQL i zapytanie w ogóle się nie wykonało;

b) zapytanie nie zwróciło żadnych wyników.

Zacznijmy od rozważenia przypadku pierwszego. po wykonaniu ->query() wywołaj $polaczenie->error; a calą resztę wywal. Metoda ->error zwraca zawsze wszystkie komunikaty i błędy wyrzucone przez obiekt mysqli. Bardzo przydatne narzędzie przy debugowaniu.

Natomiast jeśli jest problem z tą drugą rzeczą [ b) ], to najlepiej zawsze sprawdzać, czy jest jakiś $rezultat (if($rezultat)) przed wykonaniem dalszych operacji. Jeśli nie ma - to znaczy, że nie znaleziono żadnych wyników.

komentarz 2 lipca 2015 przez artimal Gaduła (4,800 p.)

Zmieniłem na takie coś:

session_start();
if ((!isset($_SESSION['zalogowany'])) && (!$_SESSION['zalogowany']==true))
{
	header('Location: index.php');
	exit();
}
else
{
	require_once "connect.php";
	$polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
	$id = $_SESSION['ID'];
	if($rezultat = $polaczenie->query("SELECT * FROM osiagniecia WHERE ID=$id"))
	{
	$wiersz = $rezultat->fetch_assoc();
    if($wiersz['punkty']>0)
    {
    	header('Location: mathmaster.php');
    	$polaczenie->close();
		exit();
    }
}
}

I działa... Szkoda gadać ;]

komentarz 2 lipca 2015 przez Schizohatter Nałogowiec (39,600 p.)
Czyli widać po prostu nie znajdowało Ci rekordu :)
komentarz 2 lipca 2015 przez artimal Gaduła (4,800 p.)
Tylko dlaczego... Może jakieś problemy z xamppem :O
komentarz 2 lipca 2015 przez Schizohatter Nałogowiec (39,600 p.)
albo nie ma rekordu, który spełnia podane założenia?

Może zamiast "ID" powinno być "id"? Albo w sesji znajduje się jakaś nieprawidłowa dana?
komentarz 2 lipca 2015 przez artimal Gaduła (4,800 p.)
Spełniało założenia, wielkości liter odpowiednie. Nie ważne. Ważne, że teraz działa ;)
0 głosów
odpowiedź 2 lipca 2015 przez efiku Szeryf (75,160 p.)

http://php.net/manual/en/mysqli.query.php

Returns FALSE on failure. 

$id = $_SESSION['ID'];  Tu masz prawdopodobnie błąd.

Podobne pytania

–1 głos
3 odpowiedzi 7,614 wizyt
–1 głos
1 odpowiedź 1,053 wizyt
pytanie zadane 6 czerwca 2015 w PHP przez Eerie Mądrala (7,130 p.)
0 głosów
2 odpowiedzi 1,614 wizyt

92,964 zapytań

141,930 odpowiedzi

321,163 komentarzy

62,298 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...