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

Call to undefined method stdClass::query()

Object Storage Arubacloud
0 głosów
442 wizyt
pytanie zadane 28 czerwca 2022 w PHP przez Niecierpliwiec Nowicjusz (120 p.)

Pisałem połączenie bazy danych do logowania. I wyskakuje mi błąd przy query() 

Call to undefined method stdClass::query()

<?php

    require_once "connect.php";


    $polaczenie == @new mysqli($host, $db_user, $db_password, $db_name);

    if ($polaczenie->connect_errno = 0)
    {
        echo "error: " . $polaczenie->connect_errno . "opis:"   . $polaczenie->connect_error;
    }
    else
    {
     
    $login = $_POST['username'];
    $password = $_POST['password'];

    mysqli_close($polaczenie);

    $sql = " SELECT * FROM uzytkownicy WHERE user='$login' AND password='$password' "; 

    if ($rezultat = $polaczenie->query($sql))  
    {
            $ilu_userow = $rezultat->num_rows;
            if(ilu_userow>0)
            {
                $wiersz = $rezultat->fetch_assoc();
                $user = $wiersz['user'];
                $rezultat = free_result();
            }

    }
    }
   

 

1 odpowiedź

+1 głos
odpowiedź 28 czerwca 2022 przez Comandeer Guru (601,110 p.)

W linii 18. zamknąłeś połączenie z bazą danych. Nic dziwnego, że kolejne zapytanie się nie chce wykonać.

Przy okazji, polecam poczytać o zabezpieczeniu zapytań, bo obecnie bardzo prosto zrobić Ci atak SQL injection.

komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)
pomimo usunięcia linijki z zamknięciem połączenia dalej wyskakuje błąd z undefined method stdClass::query()
komentarz 28 czerwca 2022 przez Comandeer Guru (601,110 p.)

A to się wgl łączy z bazą danych? Wyciszasz błąd przy pomocy @ – to jest raczej zła praktyka.

Dodatkowo w linii 8. zamiast sprawdzić, czy $polaczenie->connect_errno jest różne od zera, przypisujesz do tej własności zero. To powinno być:

if ( $polaczenie->connect_errno != 0 )

Wówczas możliwe, że pojawi się jakiś błąd.

komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)
łączyć z bazą się łączy, tylko cały czas ma problem z tym zapytaniem
komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)
błąd żaden inny się nie wyświetlił
komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)
jedynie teraz jest

Call to a member function query() on null in
komentarz 28 czerwca 2022 przez Comandeer Guru (601,110 p.)
Błąd wskazywałby na to, że jednak nie ma połączenia z bazą. Możesz pokazać, jak wygląda ten kod po zmianach?
komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)
<?php

    require_once "connect.php";


    $polaczenie == new mysqli($host, $db_user, $db_password, $db_name);

    if ( $polaczenie->connect_errno != 0 )
    {
        echo "error: " . $polaczenie->connect_errno . "opis:"   . $polaczenie->connect_error;
    }
    else
    {
     
    $login = $_POST['username'];
    $password = $_POST['password'];

    $sql = " SELECT * FROM uzytkownicy WHERE user='$login' AND password='$password' "; 

    if ($rezultat = $polaczenie->query($sql))  
    {
            $ilu_userow = $rezultat->num_rows;
            if(ilu_userow>0)
            {
                $wiersz = $rezultat->fetch_assoc();
                $user = $wiersz['user'];
                $rezultat = free_result();
            }

    }
    }
   
   


?>

 

 

komentarz 28 czerwca 2022 przez Comandeer Guru (601,110 p.)

A, teraz dopiero widzę. W linijce 6. używasz operatora porównania zamiast przypisania. Tym samym do zmiennej $polaczenie nie trafia połączenie z bazą danych. Tam powinien być jeden znak równa się.

Ogólnie IMO sporo tu pomyłek wokół podstawowych operatorów, warto by się nad tym pochylić.

komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)

no dobrze, teraz nie wyskakuje już błąd ale po dodaniu 

 echo $user;

nie wypisuje mi nazwy użytkownika

komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)

    if ($rezultat = $polaczenie->query($sql))  
    {
            $ilu_userow = $rezultat->num_rows;
            if(ilu_userow>0)
            {
                $wiersz = $rezultat->fetch_assoc();
                $user = $wiersz['user'];
                $rezultat = free_result();

                echo $user;
            }

    }

nie wiem dlaczego tak się dzieje, uczę się dopiero z kursu https://www.youtube.com/watch?v=Pp578w7C9hE

komentarz 28 czerwca 2022 przez Comandeer Guru (601,110 p.)

Bo w if nie używasz zmiennej tylko stringa ilu_userow. Brakuje Ci $ na początku

Dodatkowo w linii 8. powinno być $rezultat->free_result();

komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)

nadal mi nie zwraca w echo tego user 

    $sql = " SELECT * FROM uzytkownicy WHERE user='$login' AND password='$password' "; 

    if ($rezultat = $polaczenie->query($sql))  
    {
            $ilu_userow = $rezultat->num_rows;
            if($ilu_userow>0)
            {
                $wiersz = $rezultat->fetch_assoc();
                $user = $wiersz['user'];

                $rezultat -> free_result();
                echo $user;
              
            }

    }
    }
   
   


 

komentarz 28 czerwca 2022 przez Comandeer Guru (601,110 p.)

A wgl wchodzi do tego całego if-a? Co się znajduje w zmiennej $rezultat po wykonaniu zapytania?

komentarz 28 czerwca 2022 przez Niecierpliwiec Nowicjusz (120 p.)
chyba nie, ogólnie po wpisaniu loginu i hasła pojawia się biała strona
komentarz 28 czerwca 2022 przez VBService Ekspert (253,280 p.)

Może nie ma takiego user-a w bazie danych o podanym loginie i haśle.

Spróbuj tak, zobacz co się wyświetli

$sql = "SELECT * FROM uzytkownicy WHERE user='$login' AND password='$password'"; 

// echo "$sql<br>"; // Od komentuj jeżeli chcesz sprawdzić zapytanie sql-owe
 
if ($rezultat = $polaczenie->query($sql))  
{
     if($rezultat->num_rows)
     {
          $wiersz = $rezultat->fetch_assoc();
          $user = $wiersz['user'];
 
           $rezultat->free_result();
           echo $user;           
      } else {
           echo 'Użytkownik o podanym loginie nie jest zapisany w bazie danych'
              . '<br>lub podany login lub hasło są niepoprawne';
      } 
} else {
    echo 'Wystąpił problem z zapytaniem sql';
}

 

Podobne pytania

0 głosów
1 odpowiedź 467 wizyt
0 głosów
0 odpowiedzi 727 wizyt
0 głosów
1 odpowiedź 633 wizyt

92,563 zapytań

141,414 odpowiedzi

319,592 komentarzy

61,948 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!

...