;
$> args [$ i] = "'".> mysql_escape_string ($ v). "'";}
> for ($> i = $ c = count ($ args) -1; $> i <$ c +20; $ і + +)
$> args [$ i +1] ="> UNKNOWN_PLACEHOLDER_ $ i";
> returncall_user_func_array ("sprintf", $> args);}?>
Функція sprintf () спріймає символ% як управляючий. Щоб скасуваті спеціальну дію, треба ее подвоїті, что робиться у Функції. Потім? замінюється на%> s, для sprintf () це "взяти Черговий Строковий аргумент". Для зручності тестування цього коду головна функція Розбита на Дві, віділено код заміні підстановчіх знаків до функцій mysql_make_qw (). p align="justify"> У лістінг у test_qw.php наведено приклад того, як віглядатімуть SQL-запит после підстановкі placeholders.
> Лістінг test_qw.php
Через войну роботи скрипта буде сгенерована наступна сторінка:
> DELETEFROMpeopleWHEREname ='' OR '1 '
> DELETEFROMpeopleWHEREname = '' OR '1'ORid = UNKNOWN_PLACEHOLDER_l
> Unknown column '> UNKNOWN_PLACEHOLDER_1' in '> whereclause1
Перед апострофами у ціх з'явилися слеші, a PlaceHolder, якому "забракнуло" аргументів Функції, оказался заміненім на рядок UNKNOWN_PLACEHOLDER_l.
Тепер будь-яка Спроба Виконання цього запиту заздалегідь приречена на Невдача (Про що свідчіть Останнє діагностічне ПОВІДОМЛЕННЯ, сгенероване викликом die ()), что є ВАЖЛИВО підмогою при налагодженні сценаріїв.
Висновки
Як у будь-якому віді ДІЯЛЬНОСТІ в програмуванні існує своя технологія - це знання, правила, навички та інструменти, что дозволяють одержуваті гарантованого якісний результат. Альо самє по Собі Дотримання ряду правил не Дає гарантію якості результату. Це пояснюється спеціфікою програмування. p align="justify"> По-перше, це не наука, де знання Якої-небудь формули дозволяє однозначно вірішіті завдання, підставівші в неї вихідні дані й одержавши результат. p align="justify">...