Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO][ODBC] Pobieranie tylko pierwszego rekordu z BD i problem z polskimi znakami
Forum PHP.pl > Forum > PHP
Smertius
Mam dość sporą bazę w Accessie z której muszę pobrać dane z poziomu PHP, łączę się z bazą

  1. try
  2. {
  3. $pdo= new PDO('odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin' /* . array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")*/);
  4. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. }
  6. catch(PDOException $e)
  7. {
  8. echo "Niestety nie udało się nawiązać połączenia<br>" . $e;
  9. }


I w tym momencie wszystko jest OK, problem pojawia się podczas pobierania danych z Accessa. Zapytanie wykonuję w taki sposób:
  1. $query=$baza->prepare('SELECT * FROM [znaki] ' );
  2. $query->execute();
  3. $wynik=$query->fetch(PDO::FETCH_ASSOC)
;

I w tym momencie pojawia się spory problem, zapytanie powinno zwrócić ok 150 rekordów, a dostaję tylko jeden. Próbowałem kilku wariantów ale skutek jest taki sam, może spotkał się ktoś z takim problemem bo ja już nie mam pojęcia co to może być. Może jest jakiś alternatywny sposób na wyciągnięcie danych z accessa?

Drugi problem to polskie znaki w nazwie tabeli podczas wykonywania zapytania
  1. $query=$baza->prepare('SELECT * FROM [Ilość cięć] ' );

Dostaję błąd
Kod
PDOException: SQLSTATE[42S02]: Base table or view not found: -1305 [Microsoft][Sterownik ODBC Microsoft Access ] Aparat bazy danych Microsoft Jet nie może znale� tabeli wej�iowej lub kwerendy 'IloĹ��ciÄ��. Sprawd� czy ona istnieje oraz czy nazwa jest poprawnie napisana. (SQLExecute[-1305] at ext\pdo_odbc\odbc_stmt.c:254)


Czyli problem jest z kodowaniem, plik ma kodowanie utf-8. Z jakiego kodowania korzystać?
nospor
Cytat
I w tym momencie pojawia się spory problem, zapytanie powinno zwrócić ok 150 rekordów, a dostaję tylko jeden.
Jakbys łaskawie raczył zajrzać do manuala:
http://pl.php.net/manual/en/pdostatement.fetch.php
to byś się dowiedział że fetch() zwraca właśnie jeden rekord. Jakbyś bardziej wnikliwie przejrzał link co ci podałem, to byś znalazł, iż należy użyć pętli (np. WHILE) by pobrać wszystkie rekordy.

Jakbyś jeszcze poszukał dokładniej linka co ci podałem i zajrzał do POWIĄZANYCH to byś znalazł fetchall() które zwraca wszystko bez pętli
http://pl.php.net/manual/en/pdostatement.fetchall.php

Manual przyjacielem a nie wrogiem....
Smertius
Nospor, nawet nie wiesz jak mi głupio zrobiłem błąd jak przedszkolak;)

Kurcze ale dalej nie mogę sobie poradzić z polskimi znakami w nazwach tabel
zend
Może spróbuj
  1. SELECT * FORM `ąć`
Smertius
Zend, nie bardzo rozumiem o co chodzi.


Gdy ustawię kodowanie na cp-1250 mogę wykonać zapytanie do każdej tabeli, nawet tych które mają polskie znaki w nazwie. Ale teraz powstał nowy problem, wszystkie dane które pobiorę w ten sposób mają krzaki, normalnie patologia. Możliwe żeby Acces korzystał z innego kodowania dla nazw tabel ora innego dla rekordów?
zend
wątek 1, wątek 2 - nie zagłębiałem się, ale może ona cię naprowadzą. Możesz spróbować wersji extremalnej, pobrania danych i konwersji w momencie wyświetlenia w php
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.