Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasa do połączeń i zapytań SQL
Zagiewa
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


Witam. Chcę stworzyć klasę do połączenia SQL w której będą też metody do zapytań jednak zależy mi na stworzeniu bardzo wydajnej klasy, a co więcej, żeby cały kod był dobrej jakości dlatego też ja mam pomysł i jakiś zalążek wiedzy, wy za to duże doświadczenie więc liczę, że mi trochę pomożecie (IMG:style_emoticons/default/smile.gif) Głównym motywem na chwile obecną jest stworzenie metod, które będą generowane w zależności od tego co będziemy chcieli osiągnąć. Poniżej zamieszczę kod, który do tej pory napisałem, a pod nim pytania.

  1. <?php
  2.  
  3. class connection {
  4.  
  5. private $DB;
  6.  
  7. function __construct($DB_in) {
  8.  
  9. $this->DB = $DB_in;
  10. }
  11.  
  12. public function SQL_connect() {
  13.  
  14. include('static.php');
  15.  
  16. $sql = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS) or
  17. die("Sprawdź połączenie z serwerem! " . mysql_error());
  18. mysql_query("SET NAMES 'utf8'");
  19.  
  20. mysql_select_db($this->DB, $sql) or
  21. die("Sprawdź bazę! " . mysql_error());
  22. }
  23.  
  24. public function select_table($what_in, $from_in) {
  25.  
  26. $pobierz = "SELECT $what_in FROM $from_in";
  27. $result = mysql_query($pobierz) or
  28. die("Sprawdź rezultat! " . mysql_error());
  29.  
  30. while($row = mysql_fetch_array($result)) {
  31.  
  32. $a = $row[$what_in];
  33. echo $a. "<br />";
  34. }
  35. }
  36. }
  37.  
  38. ?>

  1. <?php
  2.  
  3. include('class.php');
  4. $connect = new connection("nazwa_bazy");
  5. $connect->SQL_connect();
  6. $connect->select_table("id", "nazwa_tabeli");
  7.  
  8. ?>

1. Chciałem aby można było za pomocą jednej metody łączyć się z różnymi bazami dlatego zanim wywołamy metodę SQL_connect() dzięki konstruktorowi podajemy, która baza nas interesuje. Teraz pytanie czy rozwiązanie to jest dobre? Czy może lepiej było by usunąć konstruktor i nazwę bazy podać bezpośrednio do metody czyli: SQL_connect("nazwa_bazy")?
2. Jak wiadomo zanim wykonamy jakiekolwiek operacje na tabelach w bazie trzeba się połączyć z bazą więc łączenie z SQL MUSI się odbyć prawda? więc zastanawiam się czy by nie zrezygnować z metody SQL_connect() i całość kodu wstawić w konstruktor wyglądało by to tak:
  1. function __construct($DB_in) {
  2.  
  3. $this->DB = $DB_in;
  4.  
  5. include('static.php');
  6.  
  7. $sql = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS) or
  8. die("Sprawdź połączenie z serwerem! " . mysql_error());
  9. mysql_query("SET NAMES 'utf8'");
  10.  
  11. mysql_select_db($this->DB, $sql) or
  12. die("Sprawdź bazę! " . mysql_error());
  13. }

Ma to sens? Mam jeszcze pytania odnośnie metody select_table() ale to innym razem. Jeśli macie ew. jakieś zastrzeżenia co do tego kodu to piszcie. Z góry dzięki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Zagiewa
post
Post #2





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


darko dobrze kombinujesz i też tak próbowałem... jednak gdy zrobię tak jak napisałeś czyli zrezygnuję z
  1. $stmt->bindParam(':what', $what, PDO::PARAM_STR);

Nie daje żadnej poprawny jednak gdy to zostawię, a usunę:
  1. $stmt->bindParam(':from', $from, PDO::PARAM_STR);

to już działa czyli prędzej PDO nie lubi jak się od razu mu nie poda w jakiej tabeli chcemy szukać. Gdy jednak na stale wpisze mu:
  1. $stmt = $pdo->prepare('SELECT :what FROM artykuly');

To błąd znika ale otrzymuję zły wynik zapytania. Zamiast wyświetlić mi ileś tam tytułów jeden pod drugim wyświetla mi wartość zmiennej $what co wygląda to:

tytul
tytul
tytul
... itd.

OK szybkie wnioski... Gdy zamiast wstawiania za pomocą bindowania co chcę pobrać (zmienna $what) i w jakie tabeli (zmienna $from) wstawię na stale te dane, zapytanie wygląda wtedy tak:
  1. $stmt = $pdo->prepare('SELECT tytul FROM artykuly');

Wszystko działa prawidłowo. Moje pytanie brzmi: Czy zapytanie typu SELECT nie może przyjmować danych tak jak to robiłem wcześniej aby działało poprawnie? Bo metodą prób i błędów dochodzę do wniosku, że nie moze. Szkoda tylko, że nie udało mi się do tej pory znaleźć ani jednego przykładu, który pokazuje wstawianie danych do zapytania SELECT w postaci zmiennych, ani też informacji o tym, że nie wolno tego robić.

Idąc dalej tym tropem, stworzyłem też za pomocą PDO i bindowania zapytanie typu INSERT. Gdy w miejscu VALUES() wstawię zmienne zapytanie działa poprawnie jednak gdy zmienne chcę wstawić w INTO zapytanie już nie działa. Krótko mówiąc metodą prób i błędów osiągnąłem ten sam wynik. PDO nie lubi jak próbujemy wstawić zmienne w miejsca takie jak: co pobieramy, skąd pobieramy itp.

Ten post edytował Zagiewa 24.02.2011, 13:09:16
Go to the top of the page
+Quote Post

Posty w temacie
- Zagiewa   Klasa do połączeń i zapytań SQL   22.02.2011, 16:41:40
- - tehaha   oprócz zastrzeżeń to nie wiele więcej zostaje, naj...   22.02.2011, 18:45:30
- - Zagiewa   Z tym PDO to już jakiś standard? tzn zawsze się te...   22.02.2011, 22:19:07
- - tehaha   1. PDO po prostu został stworzony do obsługi bazy ...   22.02.2011, 22:34:30
- - Zagiewa   Ad.2 Fakt zapomniałem kompletnie o tym, dzięki Ad....   22.02.2011, 22:52:42
- - tehaha   dam Ci jedną radę jak pojawia Ci się jakiś błąd i ...   22.02.2011, 23:04:10
- - Zagiewa   I owszem zrobiłem tak zanim napisałem na forum i w...   22.02.2011, 23:09:06
- - mg2   Obiekt $pdo jest połączeniem do bazy. Rozłącz...   23.02.2011, 01:51:40
- - darko   Dziedzicz po klasie PDO dodając jakieś pożądane fu...   23.02.2011, 01:59:13
- - Zagiewa   Dziś już jestem zbyt zmęczony na dalsze pisanie ko...   23.02.2011, 02:22:29
- - d3ut3r   PDO to właśnie klasa której powinieneś używać, nie...   23.02.2011, 02:51:25
- - Zagiewa   d3ut3r - dokładnie o to mi chodzi. Chcę aby PDO by...   23.02.2011, 17:17:51
- - greycoffey   Tak, szukałeś, ja tu widzę rozwianie.. Kliknij...   23.02.2011, 19:22:00
- - Zagiewa   greycoffey - piękna animacja, podoba mi się jednak...   23.02.2011, 19:30:45
- - darko   Zdaje się, że ta linia [PHP] pobierz, plaintext $s...   24.02.2011, 04:05:59
- - Zagiewa   darko dobrze kombinujesz i też tak próbowałem... j...   24.02.2011, 12:16:41
- - darko   Racja oczywiście nie wolno parametryzować nazw tab...   24.02.2011, 13:55:55
- - Zagiewa   OK zgodzę się z tym, że bindowanie ma na celu zabe...   24.02.2011, 14:13:23
- - darko   Efekt, o który pytasz uzyskuje się za pomocą metod...   24.02.2011, 14:22:13
- - Zagiewa   Więc twierdzisz, że się da stworzyć taki schemat? ...   24.02.2011, 14:33:47
- - darko   Mam wrażenie, że sam sobie nieco utrudniasz życie....   24.02.2011, 15:59:50
- - Zagiewa   darko masz racje można wstawić w zapytanie zmienne...   24.02.2011, 16:41:44


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 15:26