Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Bazy SQL][PHP][PDO] Problem z zapytaniami
giera
post 21.01.2013, 19:12:10
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 30.11.2012

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


Witam mam problem z PDO i prosił bym kogoś kto bawi sie tą biblioteką, mianowicie nie jestem pewnie co do możliwości PDO i z góry mówię że w "google" mam problem na odnalezienie odpowiedzi. Mianowicie tworze test baz danych i nie wiem do końca czy PDO obsługuje moje zapytania jeśli używam składni języka MySQL. Przypuszczam że PDO działa na zapytaniach typu SELECT, INSERT i UPDATE ale mi zależy konkretnie na CREATE. Za pomocą PDO chcę stworzyć tabele w już istniejącej bazie danych, mam stworzoną kod tworzący tabele w mysql no i po użyciu takiego zapytania baza powstaje i nie mam problem ale jeśli już stworze to samo zapytanie tylko dla oracla,pgsql,db2 to niestety wyskakują błędy, głównie że składnia jest nieprawidłowa. PDO ma konwertować zapytania pod inne silniki no ale niestety jeśli chodzi od CREATE jest problem. Mój kod na przykładzie oracla wygląda tak:

  1. <?php
  2.  
  3.  
  4. try
  5. {
  6. $pdo = new PDO("oci:dbname=localhost/orcl;charset=UTF8", "system", "Admin123");
  7. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  8. }
  9. catch(PDOException $e)
  10. {
  11. echo 'Połączenie z Oracle nie mogło zostać utworzone: ' . $e->getMessage();
  12. }
  13.  
  14. try
  15. {
  16. $time_start = microtime();
  17. $sql = "CREATE TABLE example (
  18. id int(11) NOT NULL,
  19. data VARCHAR(100)
  20. )";
  21.  
  22. $sq = $pdo->query($sql);
  23.  
  24. $time_end = microtime();
  25. $time = $time_end - $time_start;
  26. }
  27. catch(PDOException $e)
  28. {
  29. echo 'Nie można wykonać zapytania: ' . $e->getMessage();
  30. }
  31.  
  32.  
  33. if ($sq) {
  34. echo 'Tabela stworzona w czasie:';
  35. echo $time;
  36. echo '<br>';
  37. }
  38.  
  39. $time = 0;
  40. $pdo = null;
  41.  
  42. ?>


I juz mu sie nie podoba w linii "id int(11) NOT NULL" gdzie MySQL łyknął to bez problemu (nie dziwi mnie to skoro zapytanie w składni MySQL) ale jak zmodyfikuje kod i zostawię samo "int" to tworzy tabele.
Oczywiście mogł bym stworzyć identyczne tabele dla każdego silnika ale jaki jest wtedy sens używania PDO?
Może wiecie jak ugryźć temat? Czy robie coś źle? Proszę o pomoc

Ten post edytował giera 21.01.2013, 19:18:35
Go to the top of the page
+Quote Post
jaslanin
post 21.01.2013, 20:08:30
Post #2





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


Cytat
PDO ma konwertować zapytania pod inne silniki no ale niestety jeśli chodzi od CREATE jest problem.


Nic takiego nie robi, masz złe info: http://php.net/manual/en/intro.pdo.php

Cytat
PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility.


Takie rzeczy robią systemy DAL, ORM np. Doctrine, propel.

Ten post edytował jaslanin 21.01.2013, 20:08:45


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
giera
post 21.01.2013, 21:48:21
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 30.11.2012

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


dobra już wiem wszystko, no faktycznie trochę nie doczytałem ale juz jestem na właściwym torze. Dzieki za odp
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 - 17:27