Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Bazy SQL][PHP][PDO] Problem z zapytaniami
Forum PHP.pl > Forum > Przedszkole
giera
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
jaslanin
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.
giera
dobra już wiem wszystko, no faktycznie trochę nie doczytałem ale juz jestem na właściwym torze. Dzieki za odp
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.