Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Brak połączenia z bazą
ewu
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.09.2014

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


Witam, jestem mocno początkująca jeśli o PHP i pisząc skrypt natrafiłam na problem, przez co nie mogę ruszyć dalej.

  1. class connect_pdo {
  2.  
  3.  
  4. public function connect($username, $password) {
  5.  
  6. try {
  7.  
  8. $dsn = 'mysql:host=localhost;dbname=xxx';
  9. $options = array(
  10. PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
  11. PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  12. $dbh = new PDO($dsn, $username, $password, $options);
  13.  
  14. } catch (PDOException $e) {
  15. echo "Error!: " . $e->getMessage();
  16. die();
  17. }
  18. public function selectAll($us, $first) {
  19.  
  20.  
  21. $query = "SELECT $us.name, $first.genre from $us, $first where $us.name = $first.name";
  22. $result = mysql_query($query) or die('Blad MySQL: ' . mysql_error());
  23.  
  24. while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
  25.  
  26. print_r($row);
  27. }
  28. }
  29. }


Oto mój kawałek kodu służący do połączenia z bazą danych. $username i $password podaję poprzez odniesienie w index.php
Gdy wywołuję samą funkcję connect() jest ok, nie wyskakuje błąd. Natomiast gdy dodam funkcję selectAll w konsoli pojawia się: no database selected.

  1. <?php
  2.  
  3. require_once('test.php');
  4.  
  5. $mysql = new connect_pdo();
  6. $mysql->connect('xxx','xxx');
  7. print_r($mysql->selectAll('users', 'first_name'));


Już nie wiem gdzie może występować błąd, pomożecie?

Ten post edytował ewu 10.09.2014, 09:47:11
Go to the top of the page
+Quote Post
Turson
post
Post #2





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

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


Metoda connect() nie ma argumentów.
Powinnaś je podać
  1. public function connect($dsn, $user, $password, $options){}

i przekazać odpowiednio
Go to the top of the page
+Quote Post
ewu
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.09.2014

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


Dalej no database selected

Ten post edytował ewu 10.09.2014, 10:03:11
Go to the top of the page
+Quote Post
Turson
post
Post #4





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

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


Tutaj musisz przekazać wszystko, np.
  1. $mysql->connect('localhost', 'nazwa_uzytkownika', 'haslo', array());


Ten post edytował Turson 10.09.2014, 10:03:49
Go to the top of the page
+Quote Post
ewu
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.09.2014

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


To samo. Próbowałam już innym sposobem

  1. $dbh = new PDO('mysql:host=' . $dsn . ';dbname=' . $database , $username, $password);

analogicznie podając $dsn, $database, $username i $password i dalej nic
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Uzywajac PDO nie mozesz uzywasz mysql_query... to są dwa rozne mechanizmy... Uzywajac do łączenia PDO, to i do wykonywania zapytan masz uzywac PDO


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Inna sprawa że mając w connect() konstruktor połączenia (zmienna $dbh) nie będzie on widoczny w selectAll().


--------------------
Go to the top of the page
+Quote Post
ewu
post
Post #8





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.09.2014

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


Czyli za każdym razem przy tworzeniu nowej funkcji powinnam ten konstruktor wklejać na jej początek czy da się to obejść i stworzyć funkcję stricte odpowiedzialną za połączenie?
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




Poprostu $dbh zrob jako wlasciwosc klasy. To są podstawy klas i skoro sie bierzesz za klasy powinna jest znac.

Nie:
  1. $dbh = new PDO($dsn, $username, $password, $options);

a:
  1. $this->dbh = new PDO($dsn, $username, $password, $options);


I na poczatku:
  1. class connect_pdo {
  2. public $dbh;

I w kazdej innej metodzie klasy odwolujesz sie nie $dbh a $this->dbh


Ale najpierw wywal te mysql_query


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ewu
post
Post #10





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 10.09.2014

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


Dziękuję, dziękuję. Właśnie o to chodziło smile.gif
Go to the top of the page
+Quote Post

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: 20.08.2025 - 23:33