• 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

Object Storage Arubacloud
0 głosów
2,196 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,329 wizyt
–1 głos
1 odpowiedź 1,038 wizyt
pytanie zadane 6 czerwca 2015 w PHP przez Eerie Mądrala (7,130 p.)
0 głosów
2 odpowiedzi 1,467 wizyt

92,552 zapytań

141,399 odpowiedzi

319,533 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...