Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] PDO w kodzie strukturalnym?
Forum PHP.pl > Forum > Przedszkole
-Początkujący-
Chciałbym zmienić obsługe bazy z przestarzałego mysql_connect etc. na pdo.

I mam kilka pytań, php ogarniam tylko strukturalnie i czy warto użyć w takim kodzie pdo i czy działało by to sensownie?

Da się zrobić jakieś stałe połączenie z bazą za pomocą pdo? Czemu pytam? Już pisze.

Poczytałem troche o pdo i chciałem powoli edytować pliki. Mam plik config_db.php gdzie miałem połączenie z bazą - zmieniłem na pdo.

W pliku index.php sklejałem head.php (includuje tam config_db.php oraz func.php), news.php i foot.php. No wszystko działało, połączenie z bazą było, ale tylko do momentu kiedy chciałem użyć funkcji z pliku func.php w foot.php.

Funkcja polegała na tym, że zliczała ilość użytkowników online. Na starym połączeniu, wystarczał tylko plik config_db.php w head.php i zapytania w funkcjach działały wszedzie (head, news, foot), bez połączenia w func.php.

Teraz pdo wypluwa błąd, że nie ma połączenia :< Kiedy dodałem na poczatku funkcji nowe połączenie pdo, to wszystko działało. Widać mało czytałem, ale troche bez sensu, że połączenie nie jest dostępne dla funkcji które są inkludowane zaraz po połączeniu - chyba, że źle coś robie, to przepraszam ;d.

Troche zawile to wyjaśniłem, ale może ktoś się połapie. ;p

Z góry proszę nie pisać coś w stylu: "Naucz się OOP" - próbowałem kilka razy, ale to dla mnie jakaś czarna magia (ucze się sam z kursów na necie ;p)

Tutaj kod, gdyby ktoś chciał: http://wklej.to/i7apF

mmmmmmm
zamiast # kiedy dodam tutaj nowe poalczenie z baza to dziala
daj :
GLOBAL $db;
Ale osobiście odradzam PDO. Ma za dużo błędów (jak dla mnie). Stare, poczciwe mysql_ najlepsze...
pitu
Cytat(mmmmmmm @ 8.05.2013, 18:15:41 ) *
Ale osobiście odradzam PDO. Ma za dużo błędów (jak dla mnie). Stare, poczciwe mysql_ najlepsze...


Ty tak na serio?
mmmmmmm
Cytat(pitu @ 8.05.2013, 18:18:11 ) *
Ty tak na serio?

Niestety tak. PDO ma błędy, co gorsza z jakichś powodów nie wykona SQL i zapomni o tym poinformować, Zero komunikatu o błędzie.
ber32
mm podaj jakie. Podaj jakie użytkownicy chętnie poznają
!*!
Cytat(mmmmmmm @ 8.05.2013, 23:34:53 ) *
Niestety tak. PDO ma błędy, co gorsza z jakichś powodów nie wykona SQL i zapomni o tym poinformować, Zero komunikatu o błędzie.


Zgłosiłeś to? To podaj przykład, bo trudno mi uwierzyć że zapomina poinformować o niewykonaniu połączenia.
skowron-line
Obstawiam że kolega @mmmmmmm machnął sobie jakiegoś wrapera do PDO smile.gif Ale jak reszta czekam na przykład
mmmmmmm
JEdne błędy nazywają "ficzerami". Np. taki "ficzer": For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement.
Albo nie zgłaszanie błędu, gdy INSERT/UPDATE nie powiedzie się z powodu błędnego triggera
!*!
Ok, tylko gdzie ten kod? Pisałeś że PDO jest gorsze bo nie pluje błędami. To jest gorsze, bo zawiera błędy, czy jest gorsze bo nie potrafisz z niego korzystać?
mmmmmmm
Kolejny ficzer:
  1. try
  2. {
  3. $result=$database->prepare("INSERT INTO `test`(`imie`) Values( :imie) /* jako :imie2 podam poprawne drugie imie, ale nie zawsze musze */ ");
  4. $result->execute(array(':imie'=>'HELA'));
  5. print_r($result->errorInfo());
  6. }
  7. catch (PDOException $e) {
  8. echo 'Connection failed: ' . $e->getMessage();
  9. }

Oczywiście, nie doczekam się Exception...
skowron-line
A ten wyjątek powinien się pojawić bo questionmark.gif

- jeżeli to całość to w przypadku braku obiektu masz fatala
- execute zwraca true / false
mmmmmmm
Bo zapytanie się nie wykonuje, choć jest prawidłowe. PDO twierdzi, że jest błąd HY093
skowron-line
Cytat(mmmmmmm @ 9.05.2013, 13:45:07 ) *
Bo zapytanie się nie wykonuje, choć jest prawidłowe. PDO twierdzi, że jest błąd HY093

Rozumiem że chodzi tobie o to że w stringu masz komentarz
Cytat
/* jako :imie2 podam poprawne drugie imie, ale nie zawsze musze */

i wyświetla
Kod
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /var/www/test/di/index.php on line 11

No i tu pojawia się drugi podpunkt z mojego poprzedniego posta
ber32
Z tego co widzę to wydaje się że !*! ma rację
Cytat
bo nie potrafisz z niego korzystać?
mmmmmmm
Ta. WARNING
!*!
Wyjaśni mi ktoś o co mmmmmmm chodzi?
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.