Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Czy da się używać dynamicznie funkcji SQL z biblioteką PDO?
qrzysztof
post 14.06.2014, 11:10:38
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

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


Obecnie pracuję nad zmianą "sterownika" bazy danych z przestarzałego mysql na PDO.

Mam bardzo wygodną klasę DBManager do komunikacji z bazą, rozszerzającą klasę Database, która opiera się właśnie na "sterowniku" mysql. Chcę zmienić sterownik, modyfikując jedynie klasę Database.

Oto przykładowa metoda klasy DBManager:

  1. public function insertNews($title, $text, $link, $isCompleted) {
  2. $this->insert('t_newsy')->into('tytul', 'opis', 'link', 'ukonczony', 'data');
  3. $this->values($title, $text, $link, $isCompleted, Database::sqlMeta(SQL_NOW))->execute();
  4. return $this->getInsertId();
  5. }


Prawda, że wygodne?

Ale przy zmianie sterownika z mysql na PDO pojawił się problem. Czy mi się tylko wydaje, czy naprawdę nie można do obiektu PDOStatement przekazywać funkcji SQL? Czy specjalny typ parametru PDO::PARAM_SQL (gdyby taki istniał) rzeczywiście byłby takim problemem dla bezpieczeństwa? Przecież typ parametru jest w 100% pod kontrolą programisty, więc chyba może on określić sytuacje, w których spodziewa się kodu SQL (na przykład, że parametr zawierający kod SQL może pochodzić wyłącznie z interfejsu programistycznego, natomiast nie od użytkownika końcowego).

W mojej klasie DBManager (wersja oparta na rozszerzeniu mysql) można było przekazywać parametry zawierające kod SQL bez najmniejszego ryzyka narażenia się na atak typu SQL injection. Wystarczy spojrzeć na 3. linię zacytowanego kodu, a konkretnie na wyrażenie:

  1. Database::sqlMeta(SQL_NOW)


gdzie SQL_NOW jest po prostu stałą o wartości 'NOW()'.

Próba przekazania wartości 'NOW()' w każdy inny sposób zakończyłaby się zapisem łańcucha 'NOW()' w bazie.

Czy jest jakiś sposób, żeby przekazywać do PDO dynamicznie funkcje SQL? Czy muszę przebudowywać całą warstwę odpowiedzialną za komunikację z bazą danych? W takiej sytuacji będę chyba musiał rozważyć pozostanie przy przestarzałym mysl.

Ten post edytował qrzysztof 14.06.2014, 11:18:47


--------------------
Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.08.2025 - 14:40