Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL]Call to member function prepare on null
Forum PHP.pl > Forum > Przedszkole
goartur
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?
nospor
Blad mowi przeciez wyraznie: $this->_db jest NULLem
goartur
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.
nospor
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
goartur
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. }
kapslokk
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.
nospor
Ok. I w jaki sposob odpalasz te funkcje teraz? Bo mam nadzieje ze robisz to przez obiekt a nie Serwer::funkcja ?
goartur
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
nospor
Connection::getInstance();
zwraca ci NULL - tam szukaj bledu.

Wlaczyles w ogole wyswietlanie WSZYSTKICH bledow?
goartur
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.
Turson
Jaki jest wynik
  1. echo '<pre>';var_dump(Server::getInstance());echo '</pre>';die();
goartur
Zwraca
object(Server)#8 (1) {
["_db":"Server":private]=>
NULL
}
Turson
No to problem lezy w Connection::getInstance()
goartur
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
kapslokk
Może po prostu pokaż kod Connection::getInstance(), a najlepiej całej klasy connection.
goartur
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.  
kapslokk
...
  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
goartur
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...
nospor
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 :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.