четвер, 12 лютого 2009 р.

Апостроф у SQL і старі функції кодування «Корпорація 2»

В українському тексті апостроф нерідко вводять символом одинарної лапки '. Якщо такий текст безпосередньо вставити в SQL-рядок, лапка може передчасно завершити літерал і зламати запит.

У відповідному синтаксисі SQL одиничну лапку всередині рядкового літерала подають двома послідовними одинарними лапками. Це не заміна символу на подвійну лапку ". Водночас ручна обробка лапок не є універсальним способом побудови запитів.

Історичні функції системи

У старій «Корпорація 2» використовувалися такі виклики:

$GLOBALS["c"]->ec('Текст')
$GLOBALS["c"]->dc('Текст')
$GLOBALS["c"]->ec_simple('Текст')
$GLOBALS["c"]->dc_simple('Текст')

За первісним описом, ec поєднувала перетворення кодування сайту в кодування бази з обробкою лапок. dc була описана як функція декодування, також з обробкою лапок, а варіанти з суфіксом _simple — як перетворення кодування без заміни лапок.

Напрямок перетворення для dc і dc_simple у вихідному тексті сформульовано суперечливо. Без реалізації цих функцій не можна достовірно встановити їхню поведінку. Так само обробка для SQL не забезпечує автоматично правильного екранування для PHP, JavaScript або HTML: це різні контексти.

Побудова нових запитів

Для значень у запитах PHP використовуйте підготовлені вирази й параметри, наприклад PDO. Параметри призначені для значень, а не для назв таблиць, стовпців чи довільних частин SQL. Див. PDO::prepare. Історичні функції вище не слід вважати перевіреним захистом від SQL-ін'єкцій.

Немає коментарів:

Навантажувальне тестування K2 ERP: що перевірити до пікової зміни

Демонстраційна база швидко відкривається, презентація переконлива, а справжня перевірка починається перед відправленням машин: склад проводи...