Błąd w PHP (mysqli_result)

0

Kod PHP wywala mi taki błąd:

 Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\lib\funkcje_strony.php on line 904
linia 903: $zapytanie03 = mysqli_query($polaczenie, 'SELECT nazwa, cena, ilosc, promocja FROM produkt WHERE id_produkt_pk='.mysqli_real_escape_string($polaczenie, (int)$id)) or die (mysqli_error($polaczenie));
linia 904: while ($row03 = mysqli_fetch_assoc($zapytanie03)) {
...dalszy kod...
}
...dalszy kod...

Wiem, że taki komunikat występuje w przypadku, kiedy mysqli_query zwraca błąd, jednak nie mam pojęcia dlaczego tutaj wyskakuje mi ten błąd. Nawet jak wkleję tego selecta do phpMyAdmin, to go przetwarza i nie ma błędów. Jest to część sklepu internetowego, który piszę i w tym miejscu autocommit jest ustawione na false, czy to może mieć z tym jakiś związek? Zaznaczam, że wszystkie instrukcje po tym kodzie się wykonują i nie mam z nim, żadnych problemów, wszystko załadowuje mi do bazy bez problemów. Tylko ten jeden błąd. PS. jestem dość początkującym w PHP. Proszę o pomoc w usunięciu tego błędu, z góry dziękuję za pomoc i pozdrawiam.

0

Stawiam na nieistnienie lub błędną wartość zmiennej id.

0

$zapytanie03 jest typu bool, zamiast oczekiwanego obiektu mysqli_result. Zapewne zapytanie podane w mysqli_query nie powiodło się z racji błędnej nazwy tabeli/kolumny (bo $id castujesz na inta, więc pusty string to tam nie będzie na pewno).

Zapoznaj się z PDO oraz z wyjątkami - taka obsługa błędów przez or die to bardzo brzydka i niewygodna rzecz.

Edit: dopiero teraz przeczytałem treść pod kodem.

Zapisz sobie zapytanie do osobnej zmiennej, tą zmienną podawaj do mysqli_query.
I tą zmienną sobie zdumpuj przez var_dump np. i dopiero wklejaj do phpMyAdmin - jeżeli ręcznie składasz zapytanie i wydaje Ci się ok - zapewne jest literówka, którą przeoczyłeś. Dlaczego zawsze sobie wpisuj w zmienną, wyświetlaj ją i dopiero kopiuj do phpMyAdmin by sprawdzić czy się wykona.

0

Tak, zrobiłem, błąd przy cudzysłowie był, a raczej przy jego braku. Jednak w dalszym ciągu jest ten błąd.

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\lib\funkcje_strony.php on line 909

Zrobiłem to w następujący sposób:

$zm1 = 'SELECT nazwa, cena, ilosc, promocja FROM produkt WHERE id_produkt_pk="'.mysqli_real_escape_string($polaczenie, (int)$id).'"';
echo var_dump($zm1);
echo var_dump(mysqli_query($polaczenie, $zm1));
$zapytanie03 = mysqli_query($polaczenie, $zm1) or die (mysqli_error($polaczenie));
echo mysqli_num_rows($zapytanie03);

var_dump($zm1) - zwraca:
string 'SELECT nazwa, cena, ilosc, promocja FROM produkt WHERE id_produkt_pk="4"' (length=75)
var_dump(mysqli_query($polaczenie, $zm1)); - zwraca:

object(mysqli_result)[3]
  public 'current_field' => null
  public 'field_count' => null
  public 'lengths' => null
  public 'num_rows' => null
  public 'type' => null

mysqli_num_rows($zapytanie03); (sprawdziłem jeszcze ilośc wierszy na wszelki wypadek, ale wygląda ok) - zwraca:

1
0

Aha, najważniejsze. Zapomniałem napisać, po wklejeniu zapytania do phpMyAdmin, zwraca 1 rekord, bez błędów.

Kurcze, nie zauważyłem, że jestem nie zalogowany, i napisałem to jako nie zalogowany, ale to na pewno ja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1