как от них защититься? mysql_real_escape_string все время бьет ошибку... жду подсказок о защита от иньекций
незнаю, в этот раз пытался ее вывести она не выходит... но все таки, это не совершенный способ... есть какой то более надежный способ?
Для строк: PHP: <?php function myescape($str = '', $db = false) { if(get_magic_quotes_gpc()) $str = stripslashes($str); $str = $db ? mysql_real_escape_string($str, $db) : mysql_escape_string($str); return($str); } $str = myescape($str, $db); $sql = "INSERT INTO `table_name` (`field_name`) VALUES ('{$str}')"; Для чисел: PHP: <?php $num = (int) $num; $sql = "INSERT INTO `table_name` (`field_name`) VALUES ({$num})";
не забывай не доверять всем данным если будешь юзать ajax , я тут уже нахакал несколько таких. человек думает что если он в js выставил значение , то его нельзя изменить =D
KFan Не знаю, чем тебе не нравится mysql_real_escape_string(), но можешь использовать mysqli и делать параметризированные запросы.
Забейте на MySQL и переходите на MySQLi или PDO, кончайте мирмекофилией промышлять... Вы бы ещё на РНР3 писать стали...
This function has been DEPRECATED as of PHP 5.3.0. http://www.php.net/manual/en/function.m ... string.php
а разницы между ними? я раньше специализировался только на серверах ла2 а там работа ведеться только с мускулом
rainarr Хороший способ это не тот который не сломать. Способ вообще стереть весь код и уйти в монастырь тоже работает безотказно, но лучше ли этот способ ?
По поводу моей бредофункции - согласен, что это устаревшее, но оно успешно работает и там в четырёх строчках учтена возможно вкюченная директива magic quotes, и также функция корректно отработает независимо от того, была она вызвана ДО установления соединения с б.д. или после. Сейчас всё чаще приходится пользоваться mysqli - в ТЗ по разрабатываемым сайтам начали часто выдвигать требование - только параметризированные запросы к б.д. Наверно, это хорошо, но на самом деле если чел способен проконтроллировать абсолютно элементарные вещи, то ничего плохого в стареньком mysql_query() я не вижу. А по поводу скорости... очень сомневаюсь что ДВЕ отправки данных серверу (сперва сама конструкция запроса, потом - данные) сработают быстрее, чем если отправить сразу запрос с подставленными данными. Возможно я не прав. Самоучка всё-таки
igordata Ну я бы не сказал. Тут какое дело - когда пишется сайт, не всегда заранее известно, где он будет работать. Конечно предполагается, но 100% гарантии нет. Я всегда стараюсь писать такой код, чтобы он работал независимо не только от настроек php, но и даже от ОС сервера - чтобы оно одинаково верно работало и на виндовом и на unix/linux и на Mac - серверах. Конкретно приведенная выше функция даёт мне уверенность, что данные будут правильно эскейпиться независимо от magic quotes. Хотя, как я писал только что где-то рядом, в последнее время всё реже приходится работать с таким привычным и нравящимся мне mysql_...()
вообще все mysql_ функции скоро будут deprecated http://habrahabr.ru/blogs/php/124245/ Так что давно пора на PDO переходить