Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Problem z metoda prepare
Mehis
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.09.2015

Ostrzeżenie: (0%)
-----


Hej,
Uczę się tworzyć CMS i mam problem z jedną metodą.
Próbuję zrobić autoryzację podczas logowania, według kursu ze strefy kursów.
Wszystko jest ok, do momentu linijki z funkcją prepare().

  1. function validateLogin($user, $pass){
  2. global $Database;
  3.  
  4. if($stmt = $Database->prepare("SELECT * FROM users WHERE username = ? AND password = ?")){
  5.  
  6. $stmt->bind_param("ss", $user,md5($pass.$this->salt));
  7. $stmt->execute();
  8. $stmt->store_result();
  9.  
  10. if($stmt->num_rows >0){
  11. $stmt->close();
  12. return TRUE;
  13. }else{
  14. $stmt->close();
  15. return FALSE;
  16. }
  17. }else{
  18. die();
  19. }
  20. }


$Database było tworzone w innym pliku :
  1. $server = 'localhost';
  2. $user = 'root';
  3. $pass = '';
  4. $db = 'sk_login';
  5.  
  6. $Database = new mysqli($server,$user,$pass,$db);


Plik generuje błąd:
Warning: mysqli::prepare(): Couldn't fetch mysqli in ...

Function Location
prepare ( ) ..\m_auth.php:18


Szukałem odpowiedzi na stackoverflow itp. ale nic mi to nie pomogło.
Ktoś wie, gdzie jest błąd i jak się go pozbyć?
z góry wielkie dzięki:)

Ten post edytował Mehis 29.09.2015, 20:16:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Mehis
post
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 29.09.2015

Ostrzeżenie: (0%)
-----


Ok dzięki KsaR i Pyton_000 (IMG:style_emoticons/default/smile.gif)
Teraz wszystko działa, ale musiałem dodać jeszcze jedną zmienną.
  1. $temp = md5($pass.$this->salt);
  2. $stmt->bind_param("ss", $user, $temp);

Bez tego tempa wyskakiwał błąd 'Strict standards: Only variables should be passed by reference in'.
Z ciekawości sprawdziłem w plikach kursu i tam niby wszystko działało, także nie bardzo rozumiem co zmienia fakt, czy wrzucę wynik do zmiennej, czy wywołam metodę w parametrze funkcji.

Ten post edytował Mehis 30.09.2015, 09:34:44
Go to the top of the page
+Quote Post
KsaR
post
Post #3





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


Cytat(Mehis @ 30.09.2015, 10:28:56 ) *
Ok dzięki KsaR i Pyton_000 (IMG:style_emoticons/default/smile.gif)
Teraz wszystko działa, ale musiałem dodać jeszcze jedną zmienną.
  1. $temp = md5($pass.$this->salt);
  2. $stmt->bind_param("ss", $user, $temp);

Bez tego tempa wyskakiwał błąd 'Strict standards: Only variables should be passed by reference in'.
Z ciekawości sprawdziłem w plikach kursu i tam niby wszystko działało, także nie bardzo rozumiem co zmienia fakt, czy wrzucę wynik do zmiennej, czy wywołam metodę w parametrze funkcji.

Metoda bind_param przyjmuje argumenty (poza pierwszym) przez referencje.
Referencja wskazuje co jest tym samym a nie kopia.

Np.

$zmienna&=$zmienna2; # $zmienna jest referencja do $zmienna2, a nie kopia. Czyli jak zmienisz jedno zmieni sie tez drugie.

$zmienna=$zmienna2; # $zmienna jest kopia $zmienna2, jak zmienisz 1dno to tylko to a nie oba.

Czyli generalnie referencji nie zrobisz do zadnego typu (string, array etc) musisz miec zmienna.
A czemu tak zrobili to nwm, glupi pomysl w tym wypadku, w PDO to samo (IMG:style_emoticons/default/tongue.gif)

Ten post edytował KsaR 30.09.2015, 09:40:48
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Cytat(KsaR @ 30.09.2015, 10:38:21 ) *
$zmienna&=$zmienna2; # $zmienna jest referencja do $zmienna2, a nie kopia. Czyli jak zmienisz jedno zmieni sie tez drugie.

Weź to wywal i nie pisz takich głupot...

Referencje ustala się tak:

  1. $zmienna = &$zmienna2;
Go to the top of the page
+Quote Post
KsaR
post
Post #5





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 30.09.2015, 11:08:49) *
  1. $zmienna = &$zmienna2;

+1 zamuła, wstałem o 22 i od 4tej nie mysle ;p

Ten post edytował KsaR 30.09.2015, 10:26:54
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 11:04