Дорогие разработчики конфигураций Кб. Сложилась такая ситуация, что при достаточно защищенной программе, периодически возникают дыры в программе, благодаря дырам в конфигурациях. В связи с чем были разработаны безопасные функции работы с SQL.
sql_select, sql_select_field, sql_insert, sql_delete, sql_update, и их аналоги data_select и т.п.
Использование данных функций защитит вас от SQL инъекций. Да, их не всегда возможно использовать, но в 90% случаев их достаточно.
Также желательно разрабатывать конфигурации в едином стиле. Уважайте людей которые будут поддерживать написанный вами код.
Более подробное описание по ссылке:
http://clientbase.ru...lenie_php_koda/

Безопасные функции работы с SQL. Оформление исходного кода.
Автор Analitic, 16 июля 2012 15:17
Сообщений в теме: 7
#1
Отправлено 16 Июль 2012 - 15:17
#2
Отправлено 28 Июль 2013 - 07:04
Согласно документации функции с приставкой sql работают с названием таблицы, но судя по всему они работают только с ID. Почему?
#3
Отправлено 29 Июль 2013 - 08:48
Пример?
#4
Отправлено 29 Июль 2013 - 09:14
Например, функция sql_insert имеет такое начало
function sql_insert($table_name, $data) { global $channel_tables; $table_name=str_replace('`','',addslashes($table_name)); $sql_query="INSERT INTO `".$table_name."` ("; $vals="";Судя по коду, переменная $table_name это не имя, а ID таблицы
#5
Отправлено 29 Июль 2013 - 10:53
Судя по коду, это все таки имя. Если для вас это не очевидно, проверьте на практике.
#6
Отправлено 29 Июль 2013 - 11:16
В том то и дело, что сначало попробовал. Писал имя таблицы с разными кавычками - не работает. Когда прописываю только ID таблицы - работает.
Я не очень сильный программист, но насколько я понимаю конструкция INSERT INTO работает с ID, а не с именем. Соответственно вначале функции должен быть код, который бы получал ID таблицы по ее имени, как например здесь
Я не очень сильный программист, но насколько я понимаю конструкция INSERT INTO работает с ID, а не с именем. Соответственно вначале функции должен быть код, который бы получал ID таблицы по ее имени, как например здесь
function insert_query($data, $name_table) { global $user, $lang; // получаем id таблицы по ее имени $sqlQuery = "SELECT * FROM ".TABLES_TABLE." WHERE name_table='$name_table'"; $result = sql_query($sqlQuery); $table = mysql_fetch_array($result); $table_id = $table['id'];
#7
Отправлено 29 Июль 2013 - 12:45
Цитата
В том то и дело, что сначало попробовал. Писал имя таблицы с разными кавычками - не работает. Когда прописываю только ID таблицы - работает.
А Вы случаем не путаете две разных функции sql_insert и data_insert ? Может все-таки работали с data_insert ? Первая работает исключительно с внутренними именами таблиц (любыми, включая системные), а вторая с id таблиц конфигурации (их внутреннее имя начинается с "cb_data"). Запись data_insert(14, $data) равнозначна sql_insert("cb_data14", $data) или sql_insert(DATA_TABLE.14, $data)
Цитата
но насколько я понимаю конструкция INSERT INTO работает с ID
http://phpclub.ru/my...doc/insert.html - где Вы тут увидели ID? В MySQL вообще отсутствует такое понятие. См. выше что я писал насчет имен.
Цитата
Соответственно вначале функции должен быть код, который бы получал ID таблицы по ее имени, как например здесь
Функция "insert_query" работает с внешними ("русскими") именами. Поэтому вначале получает id таблицы, чтобы затем использовать его в том же data_insert. У вас, очевидно, какая то каша в голове из функций.
#8
Отправлено 29 Июль 2013 - 15:55
Теперь понятно, перепутал внутренние и внешние имена.
Количество пользователей, читающих эту тему: 4
0 пользователей, 4 гостей, 0 анонимных