Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][SQL]Call to member function prepare on null
goartur
post
Post #1





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Call to member function prepare on null oto blad ktory otrzymuje. Dodam ze sql ktora napisalem dziala, i wykonuje sie w bazie gdy ja wkleje.
Gdu usune owa funkcje wszystko dziala znowu poprawnie.
Oto ona:
  1. public function setMassagesToRead($userID,$boxID){
  2. $query = $this->_db->prepare("UPDATE chat SET seen = 1 WHERE user_sender= :id AND chatbox_id = :boxID");
  3. $query->bindParam(":id",$userID,PDO::PARAM_STR);
  4. $query->bindParam(":boxID",$boxID,PDO::PARAM_STR);
  5. $query->execute();
  6. }


Mam polaczenie z baza, wszystko dziala gdy usune ta owa funkcje z klasy.
Wiec nie wiem gdzie jest problem.Na stackoverflow wszyscy pisali ze to problem z baza lecz to nie jest mozliwe bo poprostu po wywaleniu tej funkcji wszystko dziala poprawnie. Jakies pomysly?

Ten post edytował goartur 7.04.2016, 11:06:47
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Blad mowi przeciez wyraznie: $this->_db jest NULLem
Go to the top of the page
+Quote Post
goartur
post
Post #3





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Tak wiem, lecz napisalem ze jesli usune ta funkcje to wszystko dziala poprawnie. Poza tym linijke wyzyej w kontrol. wywoluje inna funkcje z owej klasy i wszystko dziala.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Uwielbiam takie odpowiedzi :/
Tak, jesli ja usuniesz, to ci dziala, bo masz ja zle napisana to logiczne ze dziala gdy ja wywalisz....

A co ja ci moge powiedziec wiecej po takiej ilosci kodu co tu nam dales? Jakas wyrwana z kontekstu funkcja, czort wie jak wyglada reszta kodu... Na chwile obecna $this->_db jest NULLem i tyle w temacie
Go to the top of the page
+Quote Post
goartur
post
Post #5





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Cytat(nospor @ 7.04.2016, 11:16:39 ) *
Uwielbiam takie odpowiedzi :/
Tak, jesli ja usuniesz, to ci dziala, bo masz ja zle napisana to logiczne ze dziala gdy ja wywalisz....

A co ja ci moge powiedziec wiecej po takiej ilosci kodu co tu nam dales? Jakas wyrwana z kontekstu funkcja, czort wie jak wyglada reszta kodu... Na chwile obecna $this->_db jest NULLem i tyle w temacie

No tak sorry, tutaj jest oto funkcja.Ostatnia na samym dole.
setMassagesToRead()

  1. class Server
  2.  
  3. {
  4.  
  5. private $_db;
  6.  
  7. public static $instance;
  8.  
  9. public function __construct(){
  10.  
  11. $this->_db = Connection::getInstance();
  12.  
  13. }
  14.  
  15. public function selectAbleSkills(){
  16.  
  17. $query = $this->_db->prepare("SELECT * FROM skill_type");
  18.  
  19. $query->execute();
  20.  
  21. return $query;
  22.  
  23. }
  24. public function selectExistingStudy(){
  25.  
  26. $query = $this->_db->prepare("SELECT * FROM list_education");
  27.  
  28. $query->execute();
  29.  
  30. return $query;
  31.  
  32. }
  33.  
  34.  
  35.  
  36. public function addMatch($dataMijn, $dataJouw, $dataLike){
  37. $query = $this->_db->prepare("INSERT INTO user_match (user_1,user_2,`match`) VALUES (:dmi,:djo,:dli)");
  38.  
  39. $query->bindParam(":dmi",$dataMijn, PDO::PARAM_INT);
  40. $query->bindParam(":djo",$dataJouw, PDO::PARAM_INT);
  41. $query->bindParam(":dli",$dataLike, PDO::PARAM_INT);
  42. $query->execute();
  43. return $query;
  44. }
  45. /*public function checkIfOtherUserAlreadyMatched($secondUserID,$userID){
  46.   $query = $this->_db->prepare("SELECT * FROM user_match WHERE user_1=122 AND user_2=126 AND `match`=1");
  47.   $query->bindParam(":suid",$secondUserID,PDO::PARAM_STR);
  48.   $query->bindParam(":uid",$userID,PDO::PARAM_STR);
  49.   $query->execute();
  50.   return $query;
  51.   }*/
  52.  
  53. public function loadUserDataForApp($tokenPushID){
  54. $query = $this->_db->prepare("SELECT A.id, A.nameSurname, A.img_id, A.login_type, A.user_type FROM data_user A WHERE A.token_push_id = :token");
  55. $query->bindParam(":token", $tokenPushID, PDO::PARAM_STR);
  56. $query->execute();
  57. return $query;
  58. }
  59.  
  60. public function getChatID($u1,$u2){
  61. $query = $this->_db->prepare("SELECT id FROM chatbox WHERE user_1=:u1 AND user_2=:u2 OR user_1=:u2 AND user_2=:u1");
  62. $query->bindParam(":u1",$u1,PDO::PARAM_STR);
  63. $query->bindParam(":u2",$u2,PDO::PARAM_STR);
  64. $query->execute();
  65. return $query;
  66. }
  67. public function setMassagesToRead($userID,$boxID){
  68. $query = $this->_db->prepare("UPDATE chat SET seen = 1 WHERE user_sender =:id AND chatbox_id =:boxID");
  69. $query->bindParam(":id",$userID,PDO::PARAM_STR);
  70. $query->bindParam(":boxID",$boxID,PDO::PARAM_STR);
  71. $query->execute();
  72. return $query;
  73. }
  74. public static function getInstance()
  75.  
  76. {
  77. if(self::$instance === null)
  78. {
  79. self::$instance = new self();
  80. }
  81. return self::$instance;
  82. }
  83.  
  84.  
  85.  
  86. }


Ten post edytował goartur 7.04.2016, 11:19:40
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Zamień konstruktor na:
  1. public function __construct(){
  2.  
  3. $this->_db = Connection::getInstance();
  4. var_dump( $this->_db ); exit;
  5. }

I napisz co się wyświetla.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ok. I w jaki sposob odpalasz te funkcje teraz? Bo mam nadzieje ze robisz to przez obiekt a nie Serwer::funkcja ?
Go to the top of the page
+Quote Post
goartur
post
Post #8





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Otrzymuje NULL, nie robie tego obiektowo a statycznie.
A w taki sposob:
  1. Server::getInstance()->setMassagesToRead($userID,$id);


Dlaczego to jest zle, w innych przypadkach sprawowalo sie dobrze.

Wykomentowalem owa funkcje oraz wywolanie jej i wszystko dziala poprawnie

Ten post edytował goartur 7.04.2016, 11:33:49
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Connection::getInstance();
zwraca ci NULL - tam szukaj bledu.

Wlaczyles w ogole wyswietlanie WSZYSTKICH bledow?
Go to the top of the page
+Quote Post
goartur
post
Post #10





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Tak.... Lecz mowie ze kiedy wykomentuje funkcje to wszystko dziala... Wiec to nie ma nic z polaczeniem wspolnego.
Jesli wlacze wszystkie logi gdy mam funkcje w klasie otrzymuje tylko NULL, nic wiecej.
Go to the top of the page
+Quote Post
Turson
post
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Jaki jest wynik
  1. echo '<pre>';var_dump(Server::getInstance());echo '</pre>';die();
Go to the top of the page
+Quote Post
goartur
post
Post #12





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Zwraca
object(Server)#8 (1) {
["_db":"Server":private]=>
NULL
}
Go to the top of the page
+Quote Post
Turson
post
Post #13





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


No to problem lezy w Connection::getInstance()
Go to the top of the page
+Quote Post
goartur
post
Post #14





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Nie mam pojecia o co tu chodzi mam 35 funkcji w tej klasie, wszystkie dzialaja w roznych kategoriach aplikacji, wszystko dziala poprawnie, uzywajac tej jednej funkcji dostaje owy error, a gdy tego nie robie dostaje znowu var dump z NULL nic z tego nie rozumie.


W tym momecie zwraca mi znowu
object(Server)#5 (1) {
["_db":"Server":private]=>
object(PDO)#6 (0) {
}
}

Lecz daje nadal error:

: Call to a member function prepare() on null in

Gdy usune owa funkcje i dam var_dump(Server::getInstance());
otrzymuje error w innej klasie o nazwie "User"

Gdu usune var dump to wszystko znowu dziala

Ten post edytował goartur 7.04.2016, 13:57:52
Go to the top of the page
+Quote Post
kapslokk
post
Post #15





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Może po prostu pokaż kod Connection::getInstance(), a najlepiej całej klasy connection.

Ten post edytował kapslokk 7.04.2016, 14:20:25
Go to the top of the page
+Quote Post
goartur
post
Post #16





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Jasne lap:

  1. class Connection
  2. {
  3. private static $instance;
  4. public static function getInstance(){
  5. $host = Config::get('database/host');
  6. $dbname = Config::get('database/db');
  7. if(!self::$instance){
  8. try {
  9. self::$instance = new PDO("mysql:host=$host;dbname=$dbname", Config::get('database/login'), Config::get('database/password'));
  10. return self::$instance;
  11. }catch (Exception $Error){
  12. echo 'Error has been detected:';
  13. die('Error has been detected: ' . $Error->getMessage());
  14. }
  15. }
  16. }
  17. }
  18.  
Go to the top of the page
+Quote Post
kapslokk
post
Post #17





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


...
  1. var_dump(Connection::getInstance());
  2. var_dump(Connection::getInstance());

getInstance zwraca instancje połączenia tylko jeśli nie była wcześniej stworzona. Powyższy kod Ci to pokaże.
Dodaj po ifie f(!self::$instance) {.. } return self::$instance;



http://phpedia.pl/wiki/Singleton

Ten post edytował kapslokk 7.04.2016, 14:41:46
Go to the top of the page
+Quote Post
goartur
post
Post #18





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Cytat(kapslokk @ 7.04.2016, 14:39:25 ) *
...
  1. var_dump(Connection::getInstance());
  2. var_dump(Connection::getInstance());

getInstance zwraca instancje połączenia tylko jeśli nie była wcześniej stworzona. Powyższy kod Ci to pokaże.
Dodaj po ifie f(!self::$instance) {.. } return self::$instance;



http://phpedia.pl/wiki/Singleton

Dzieki wielkie, dzieki tobie uda mi sie oddac projekt, miales racje, duzy blad logiczny...
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie zebym sie jakos specjalnie czzepial, ale juz dawno ci mowilem ze blad jest wlasnie tam, a ty zamiast sprawdzic/pokazac nam tamten kod, to dalej ze swoją spiewką 'A jak usune to dziala'...
Na przyszlosc od razu sluchaj co piszą. Posluchales dopiero jak trzecia osoba ci powiedziala bys tam zajrzal :/
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 27.08.2025 - 05:52