Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][TOMCAT][H2] Pobieranie danych z bazy. - ROZWIĄZANE
Mutak
post 25.05.2012, 10:36:13
Post #1





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

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


Witam.

Próbuję pobrać dane z tabeli bazy danych H2.

Korzystam z tego kodu:
  1. <? echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
  7. <title>PHP test</title>
  8. </head>
  9. <body>
  10. <?
  11. try {
  12. $db = new PDO("java:comp/env/testDB");
  13. ?>
  14. <p>
  15. Połączyłem się z bazą!
  16. </p>
  17. <?
  18. $sql = "SELECT * FROM testowa";
  19. $i=1;
  20. foreach ($db->query($sql) as $row) {
  21. print $i++.'.'."\t".$row[0] .' '. $row[1] . '<br />'."\n";
  22. }
  23. $db = null;
  24. } catch (PDOException $e) {
  25. echo $e->getMessage();
  26. die();
  27. }
  28. ?>
  29. </body>
  30. </html>


Niestety wyświetla mi się tylko "Połączyłem się z bazą". A dane z tabeli już nie.
Tabela jest stworzona, ma dwie kolumny i 3 wiersze.
Próbowałem też takiego kodu:
  1. $db = new PDO("java:comp/env/test");
  2.  
  3. $stmt = $db->prepare("SELECT * FROM testowa");
  4. $i=1;
  5. try{
  6. if($stmt->execute()){
  7. while($value = $stmt->fetch(PDO::typFetcha)){
  8. print $i++.'.'."\t".$value[0] .' '. $value[1] . '<br />'."\n";
  9.  
  10. }
  11. }
  12. }
  13. catch(Exception $e){
  14. $e->getMessage();
  15. }

Tyle że tu wyskakuje:
Testowy.php:16: Fatal Error: 'execute' is an unknown method of false. Jeśli nawet usunę linijkę
  1. if($stmt->execute())

To nic się nie wyświetla

Ten post edytował Mutak 25.05.2012, 14:05:56
Go to the top of the page
+Quote Post
nospor
post 25.05.2012, 12:09:18
Post #2





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




prepare() zwraca ci false czyli masz błąd. Wyświetl teraz ten błąd a dowiesz sie co masz źle.


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

"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
Mutak
post 25.05.2012, 12:43:20
Post #3





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

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


Hmm, a da się sprawdzić jaki to błąd? Teoretycznie połączenie z bazą mam, tabela istnieje, dane też w niej są więc nie bardzo rozumiem co jest nie tak...
Go to the top of the page
+Quote Post
nospor
post 25.05.2012, 12:45:43
Post #4





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




Jakby nie można było zobaczyć błędu to bym ci głupio nie pisał, że masz go wyświetlić..... rety....

PDO zawiera numer oraz tekst błędu. Teraz zajrzyj do manuala i zobacz gdzie to jest zawarte w 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
Mutak
post 25.05.2012, 13:20:09
Post #5





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

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


Hm, myślałem, że zawarty try/catch wyświetli błąd, lecz no okazało się, że nie. Zmieniłem:

  1.  
  2. try{
  3. $db = new PDO("java:comp/env/testDB");
  4. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. $stmt = $db->prepare('SELECT id,nam FROM TESTOWA');
  6.  
  7. } catch (PDOException $e ) {
  8. echo $e->getMessage();
  9. }
  10.  


Co dało efekt:

Cytat
Ścieżka\Test.php:14: Warning: function 'PDOException' has 2 required arguments, but only 1 were provided SQLSTATE[SQLSTATE[42S02]: Tablela "TESTOWA" nie istnieje Table "TESTOWA" not found; SQL statement: SELECT id,nam FROM TESTOWA [42102-153]]: null Ścieżka\Test.php:14: Fatal Error: Method call 'execute' is not allowed for a null value.


Jakiś progress jest, ale z tego wynika, że nie podłączył się do bazy danych :/
Go to the top of the page
+Quote Post
nospor
post 25.05.2012, 13:24:43
Post #6





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




Jakby się nie podłączył do bazy to byś dostal wyjątek ze nie moze się podłączyć, a nie ze tabela nie istnieje.


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

"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
Mutak
post 25.05.2012, 13:45:48
Post #7





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

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


Jest tak jak mówisz, podłączył się do bazy danych.

Ogarnąłem już, przez cały czas myślałem, że jak w new PDO jest na końcu testDB, to i baza danych nazywa się testDB, a przecież w context.xml testDb to tylko nazwa, a baza danych to w rzeczywistości test. już pobiera mi dane, dodaje tabele, usuwa więc już powinienem ogarnąć resztę.

Dzięki wielkie nospor, wystarczyło dobrze wgłębić się i odczytać błędy i po problemie 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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 21:03