Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Błąd z prepare
Forum PHP.pl > Forum > Przedszkole
Dominator
Dlaczego pojawia mi się taki błąd ?

Fatal error: Call to a member function prepare() on a non-object in ...

  1. function PDOConnect($host, $dbname, $user, $pass)
  2. {
  3. try
  4. {
  5. $dbh = new PDO('mysql:host='.$host.';dbname='.$dbname.'', $user, $pass);
  6. $dbh = null;
  7. }
  8. catch (PDOException $e)
  9. {
  10. print "ERROR =>: ".$e->getMessage();
  11. die();
  12. }
  13. }
  14.  
  15. PDOConnect("localhost", "xxx", "xxx","xxx");
  16.  
  17. $dbh = PDOConnect("localhost", "xxx", "xxx","xxx");
  18. $sth = $dbh->prepare("SELECT xxx FROM xxx");
  19. $sth->execute();
  20. $result = $sth->fetchAll();
  21. print_r($result);


Dodam, że wczoraj rozpocząłem naukę PDO, więc proszę o wyrozumiałość.

Oraz czy ja w bezpieczny sposób wyciągam dane z bazy ?
webdice
Zmienna dbh jest niedostępna poza funkcją. Dobrze kombinujesz przypisując do niej wartość zwracaną przez funkcje. Problem w tym że tej wartości nie zwracasz wink.gif.

  1. function PDOConnect($host, $dbname, $user, $pass)
  2. {
  3. //...
  4.  
  5. return $dbh;
  6. }
memory
  1. $dbh = null;
niepotrzebne
Dominator
Dzięki chłopaki, naprawiłem to wink.gif

Macie po + smile.gif

Ale jeszcze pozostaje jedna kwestia - czy ja w bezpieczny sposób wyciągam dane z bazy ?
Mackos
No jeszcze musisz bindować wartości przed execute czyli:
  1. $pdo->query("SELECT * FROM cos WHERE imie=:zmienna_string and wiek=:zmienna_int");
  2. $pdo -> bindValue(":zmienna_string", $zmienna_str, PDO::PARAM_STR);
  3. $pdo -> bindValue(":zmienna_int", $zmienna_int, PDO::PARAM_INT);
  4. $pdo -> execute()


//Edit
Polecam http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO
Dominator
Cytat(Mackos @ 25.07.2012, 12:55:31 ) *
No jeszcze musisz bindować wartości przed execute czyli:
  1. $pdo->query("SELECT * FROM cos WHERE imie=:zmienna_string and wiek=:zmienna_int");
  2. $pdo -> bindValue(":zmienna_string", $zmienna_str, PDO::PARAM_STR);
  3. $pdo -> bindValue(":zmienna_int", $zmienna_int, PDO::PARAM_INT);
  4. $pdo -> execute()


Bardzo dziękuję smile.gif

Wszyscy macie po +
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.