Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Brak połączenia z bazą
Forum PHP.pl > Forum > Przedszkole
ewu
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?
Turson
Metoda connect() nie ma argumentów.
Powinnaś je podać
  1. public function connect($dsn, $user, $password, $options){}

i przekazać odpowiednio
ewu
Dalej no database selected
Turson
Tutaj musisz przekazać wszystko, np.
  1. $mysql->connect('localhost', 'nazwa_uzytkownika', 'haslo', array());
ewu
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
nospor
Uzywajac PDO nie mozesz uzywasz mysql_query... to są dwa rozne mechanizmy... Uzywajac do łączenia PDO, to i do wykonywania zapytan masz uzywac PDO
viking
Inna sprawa że mając w connect() konstruktor połączenia (zmienna $dbh) nie będzie on widoczny w selectAll().
ewu
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?
nospor
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
ewu
Dziękuję, dziękuję. Właśnie o to chodziło smile.gif
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.