Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PDO queryString z bindami
Siner
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 6
Dołączył: 2.01.2004

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


Chciałem sobie zrobić mini-profiler w klasie opartej o PDO.
A dokładniej to chodzi mi o to, że metoda queryString przy wykorzystaniu z pdo::prepare zwraca zapytanie w takiej postaci: "DELETE FROM test WHERE id IN(?, ?)"
Chciałbym zrobić żeby podane w tablicy argumenty do zapytania były zamienione ze znakami '?' w kolejności, czyli tak to by wyglądało: "DELETE FROM test WHERE id IN(4, 5)";
Kombinowałem trochę na najprostszym sposobem tego rozwiązania np:
  1. <?php
  2. $s = "DELETE FROM test WHERE id IN(?, ?)";
  3. $binds = array(4, 5);
  4. echo str_ireplace ('?' , array_shift(&$binds) , $s);
  5. ?>

co oczywiście nie działa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) I się zastanawiam czy da się to uzyskać w kilku linijkach bez tworzenia pętli i przewijania zapytania po kolei po wszystkich argumentach do zamiany?
Go to the top of the page
+Quote Post
zaksmok
post
Post #2





Grupa: Zarejestrowani
Postów: 58
Pomógł: 2
Dołączył: 12.01.2006

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


można:
  1. <?
  2. $ids = array('4', '3', '5', '6');
  3. $idsString = implode(', ', $ids);
  4. $s =  "DELETE FROM test WHERE id IN($idsString)";
  5. ?>


Ten post edytował zaksmok 8.02.2009, 12:56:18
Go to the top of the page
+Quote Post
Zyx
post
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Podpinanie parametrów pod zapytanie jest realizowane przez PDO jedynie w sytuacji, kiedy baza danych nie obsługuje takiego rozwiązania. W pozostałych przypadkach rola PDO ogranicza się jedynie do wysłania zestawu danych oraz szkieletu zapytania do serwera i to on zajmuje się resztą. W ogóle operacja podpinania to coś więcej, niż zwykłe sklejenie wyjściowego zapytania z tablicy, dlatego też z PDO takiej informacji nie uzyskasz i musisz sobie sam posklejać wynik zwykłymi operacjami na tekście.

zaksmok -> a co Twoje "rozwiązanie" ma wspólnego z PDO?
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat(Zyx @ 8.02.2009, 13:56:20 ) *
Podpinanie parametrów pod zapytanie jest realizowane przez PDO jedynie w sytuacji, kiedy baza danych nie obsługuje takiego rozwiązania


Chyba odwrotnie
Go to the top of the page
+Quote Post
jarek_bolo
post
Post #5





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

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


Nie odwrotnie.
Zapytywanie bazy przy użyciu bindowania jeśli baza to wspiera jest efektywniejsze.
Więc PDO jeśli tylko baza wspiera tworzenie bindowanych zapytań nie robi tego po stronie PHP.
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


No tak tak. Czytajac tego posta za 1 razem zrozumialem zupelnie cos odwrotnie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . Przepraszam za wprowadzenie w blad.
Go to the top of the page
+Quote Post
Siner
post
Post #7





Grupa: Zarejestrowani
Postów: 159
Pomógł: 6
Dołączył: 2.01.2004

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


Ok dzięki za wyjaśnienie. Napisałem kawałek kodu który działa, ale może macie jakiś inny pomysł na zamianę znaku "?" w stringu na kolejne elementy tablicy.
Moje rozwiązanie.
  1. <?php
  2. $queryString = $stmt->queryString;
  3.            foreach ($binds as $bind) {
  4.                $queryString = preg_replace('/?/', "$bind", $queryString, 1);
  5.            }
  6. ?>
Go to the top of the page
+Quote Post

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: 8.10.2025 - 21:01