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

question-closed Błąd w MySQL

42 Warsaw Coding Academy
0 głosów
500 wizyt
pytanie zadane 15 listopada 2015 w PHP przez Radekoslaw123 Gaduła (3,080 p.)
zamknięte 15 listopada 2015 przez Radekoslaw123

Błąd w MySQL o treści:

Fatal error: Call to a member function fetch_assoc() on boolean in --- on line 12

Ten skrypt obsługuję wysyłanie do bazy danych wiadomości, które są potem wyświetlane.

A o to kod:

<?php
$polaczenie = @new mysqli($host,$user,$password, $database);
if($polaczenie->connect_errno!=0)
{
    echo "Error: ".$polaczenie->connect_errno;
    exit();
}
$data = $_COOKIE['login'];
$query = "SELECT * FROM users WHERE login='$data'";
$results= $polaczenie->query($query);
$data  = $results->fetch_assoc();
if(isset($_POST['send']))
{
$send = htmlentities($_POST['send'], ENT_QUOTES);
$lsend = strlen($send);
if($lsend>400)
{
    header("Location:chat.php");
    exit();
}
else
{
$id = $data['id'];
$time = date('H:i:s');
$polaczenie->query("INSERT INTO messages SET idu='$id', content = '$send', time = '$time'");
    header("Location:chat.php");
    exit();
}
}
?>

 

komentarz zamknięcia: Udało mi się rozwiązać :D

3 odpowiedzi

+1 głos
odpowiedź 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
wybrane 15 listopada 2015 przez Radekoslaw123
 
Najlepsza
Czemu nie sprawdzasz czy zmienna $results zwraca oczekiwaną wartość? Wystarczy najzwyklejszy IF. Może się zdarzyć, że w bazie nie będzie takiego loginu i co wtedy?
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)

Zrobiłem tak jak powiedzieliście i zmieniłem nazwę $results i nie przechodzi i tak IFa a testowałem zapytanie w MySQL i działało

o to kod:

<?php
$polaczenie = @new mysqli($host,$user,$password, $database);
if($polaczenie->connect_errno!=0)
{
    echo "Error: ".$polaczenie->connect_errno;
    exit();
}
$data = htmlentities($_COOKIE['login'],ENT_QUOTES);
$query = "SELECT * FROM users WHERE login='$data'";
if($rezultat= $polaczenie->query($query))
{
$data  = $rezultat->fetch_assoc();
if(isset($_POST['send']))
{
$send = htmlentities($_POST['send'], ENT_QUOTES);
$lsend = strlen($send);
if($lsend>400)
{
    header("Location:chat.php");
    exit();
}
else
{
$id = $data['id'];
$time = date('H:i:s');
$polaczenie->query("INSERT INTO messages SET idu='$id', content = '$send', time = '$time'");
    header("Location:chat.php");
    exit();
}
}
}
else
{
    echo "Niespodziewany błąd, nie można wysłać wiadomości.";
}
?>

 

komentarz 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
Prawdopodobnie nie ma takiego loginu w bazie danych.

Usuń też tą małpę sprzed new i zobacz czy nie jest zwracany jakiś błąd. Bo to, że masz później warunek nie oznacza, że klasa mysqli nie może zwrócić jakiegoś błędu i sama zakończyć działanie skryptu.
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
Błąd poprostu godny mnie :)

zapomniałem dodać include z connect.php

i nawet nie nawiązał połączenia,

masz naj i upvote :)
komentarz 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
Przewinęło się już tutaj wiele podobnych tematów, ale tym razem akurat na to nie zwróciłem uwagi.
0 głosów
odpowiedź 15 listopada 2015 przez Boshi VIP (100,240 p.)
$results nie jest typem mysqli.
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
A jak mam zrobić żeby był MySQLi?
0 głosów
odpowiedź 15 listopada 2015 przez Arkadiusz Waluk Ekspert (290,090 p.)

https://forum.pasja-informatyki.pl/36444/call-to-a-member-function-fetch_assoc-on-boolean?show=36459#a36459

Co więcej pisać jak tu wszystko wyjaśnione.


A tak poza tym

$data = $_COOKIE['login'];
$query = "SELECT * FROM users WHERE login='$data'";

Odważnie, gratuluję zaufania do tego co jest w ciasteczku (ja bym się tak troszkę bał) ;)

komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)

Faktycznie, co do ciasteczka trochę zmieniłem ale i tak teraz mi wychodzi else i błąd że

Niespodziewany błąd, nie można wysłać wiadomości.

A kod taki jest:

<?php
$polaczenie = @new mysqli($host,$user,$password, $database);
if($polaczenie->connect_errno!=0)
{
    echo "Error: ".$polaczenie->connect_errno;
    exit();
}
$data = htmlentities($_COOKIE['login'],ENT_QUOTES);
$query = "SELECT * FROM users WHERE login='$data'";
if($rezultat= $polaczenie->query($query))
{
$data  = $rezultat->fetch_assoc();
if(isset($_POST['send']))
{
$send = htmlentities($_POST['send'], ENT_QUOTES);
$lsend = strlen($send);
if($lsend>400)
{
    header("Location:chat.php");
    exit();
}
else
{
$id = $data['id'];
$time = date('H:i:s');
$polaczenie->query("INSERT INTO messages SET idu='$id', content = '$send', time = '$time'");
    header("Location:chat.php");
    exit();
}
}
}
else
{
    echo "Niespodziewany błąd, nie można wysłać wiadomości.";
}
?>

 

komentarz 15 listopada 2015 przez Arkadiusz Waluk Ekspert (290,090 p.)
Jesteś pewien że to zapytanie jest dobre? Na pewno sprawdzasz w dobrej bazie, masz taką tabele, kolumny itd?
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
Ja takie samo zapytanie dałem w MySQL i działało, jak to konieczne to ja mogę dać bazę danych w pliku .sql
komentarz 15 listopada 2015 przez writen Nałogowiec (29,060 p.)
Raczej nie o to chodziło z tym ciastkiem :p
komentarz 15 listopada 2015 przez Radekoslaw123 Gaduła (3,080 p.)
To ja nie wiem, ja jestem nie zbyt dobry w PHP ;-;

Podobne pytania

0 głosów
4 odpowiedzi 589 wizyt
pytanie zadane 25 listopada 2015 w PHP przez natip21 Nowicjusz (230 p.)
0 głosów
1 odpowiedź 262 wizyt
pytanie zadane 3 października 2015 w SQL, bazy danych przez ReksetoDev Gaduła (4,530 p.)
0 głosów
1 odpowiedź 369 wizyt
pytanie zadane 9 listopada 2015 w PHP przez Pytający Początkujący (290 p.)

93,379 zapytań

142,380 odpowiedzi

322,533 komentarzy

62,734 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...