Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][TOMCAT][H2] Pobieranie danych z bazy. - ROZWIĄZANE
Forum PHP.pl > Forum > Przedszkole
Mutak
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
nospor
prepare() zwraca ci false czyli masz błąd. Wyświetl teraz ten błąd a dowiesz sie co masz źle.
Mutak
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...
nospor
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.
Mutak
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 :/
nospor
Jakby się nie podłączył do bazy to byś dostal wyjątek ze nie moze się podłączyć, a nie ze tabela nie istnieje.
Mutak
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
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.