Próbuję stworzyć bardzo prostą abstrakcję baz danych, jedną jej część za pomocą przygotowanych zapytań.Implementacja prostego przygotowanego zapytania w PHP
Teraz mam funkcją wziąć ciąg kwerendy i tablicę wartości takiego:
$query = "SELECT `first_name`, `last_name` FROM ::table_name WHERE `id` = :id"
$values = array(
'table_name' = $this->table_name,
'id' = $user_id,
);
będzie utworzyć kwerendę tak:
SELECT `first_name`, `last_name` FROM `sometablename` WHERE `id` = '1234'
mój problem jest taki:
Używam preg_replace_callback
do pobierania identyfikatorów :: i: identyfikatorów z ciągu zapytania, a następnie wysyłania ich do funkcji sanityzacji. Problem polega na tym, że muszę również wysłać tablicę wartości, aby funkcja mogła przyjąć dopasowanie z wyrażenia regularnego, pobrać element w tablicy wartości za pomocą tego klucza, uciec z wartości, zawinąć ją w odpowiednie cudzysłowy, a następnie zwrócić. .
Ale nie mogę przekazać żadnej dodatkowej informacji do oddzwonienia. Mogłabym użyć prywatnej zmiennej statycznej, ale jest to bardzo łatwa odpowiedź: hacky.
Jakie jest inne podejście do tego?
to jest idealne! Chciałbym przeczytać to zanim użyłem dużej klasy, aby sobie z tym poradzić ... Myślę, że zmienię to na tę prostszą wersję. Dziękuję Ci! –
Możesz też użyć http://php.net/manual/en/function.preg-replace-callback.php. Nie podoba mi się pomysł umieszczania kodu w łańcuchach. – mpen
@Mark - Carson stwierdza, że 'preg_replace_callback()' nie działa dla niego, ponieważ nie możesz przekazać dodatkowych parametrów do funkcji wywołania zwrotnego. Używanie 'preg_replace()' z opcją 'e' jest obejściem. Zauważ też, że 'preg_replace_callback()' wykorzystuje oszacowany kod, więc jest to po prostu charakter sytuacji. – zombat