Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: использование констант для названий таблиц
 
 автор: Slo_Nik   (24.05.2010 в 20:52)   письмо автору
 
 

Добрый вечер.
Подскажите, пожалуйста, как правильно сделать?
Есть база данных, имена таблиц выносятся в отдельный файл, присваиваются переменным и потом переменные подставляются в запрос к базе

<?php 
 
// файл со списком таблиц
$table1 "`table1`";

// файл с запросом к базе
$query "SELECT * FROM $table1";
?>

Вопрос в следующем, целесобразно ли использовать константы в данном случае, как это может повлиять на безопасность сайта?Имеется ввиду, что вместо переменной $table1 использовать константу и подставлять в запрос.
И второй вопрос в том, что если не использовать константы, то надо ли обрабатывать переменную $table1 функцией mysql_real_escape_string перед подстановкой в запрос?

  Ответить  
 
 автор: cheops   (24.05.2010 в 21:19)   письмо автору
 
   для: Slo_Nik   (24.05.2010 в 20:52)
 

1. Можно использовать константы, правда они не всегда удобны - их нельзя интерполировать как переменные.
2. В том виде, как у вас определены переменные можно обойтись без констант, экранировать переменные mysql_real_escape_string() тоже не обязательно, хотя вреда не будет, маловероятно, что ваши переменные с именами таблиц будут содержать кавычки или какие-то вставки.

  Ответить  
 
 автор: Slo_Nik   (24.05.2010 в 21:21)   письмо автору
 
   для: cheops   (24.05.2010 в 21:19)
 

>их нельзя интерполировать как переменные.
предполагается использовать только для имён таблиц
а какие неудобства можно ещё встретить при использовании констант?

  Ответить  
 
 автор: cheops   (24.05.2010 в 21:27)   письмо автору
 
   для: Slo_Nik   (24.05.2010 в 21:21)
 

Тут дело вкуса, мне кажется, что
$query = "SELECT * FROM $table1 WHERE id=3";

выглядит более читабельным и набирается быстрее, чем
$query = "SELECT * FROM ".TABLE1." WHERE id=3";

PS С константами вы получаете бонус - они действуют по всей области видимости, т.е. не нужно передавать имя таблицы через параметр функции или объявлять его глобальным. С другой стороны используя константы вы теряете возможность использовать собственные пространства имен, объединяя переменные с таблицами в массив или класс/объект. И тот и другой подход имеет право на существование, но если вам приходится динамически принимать решение об использовании той или иной таблицы (например, функция работает с иерархией каталога статей, каталога новостей и каталога фотогалереии), то лучше воспользовать переменными - удобнее будет (мы в студии именно поэтому в свое время приняли решение использовать переменные, а не константы).

  Ответить  
 
 автор: Slo_Nik   (24.05.2010 в 21:35)   письмо автору
 
   для: cheops   (24.05.2010 в 21:27)
 

спасибо, более менее понятно.
а что Вы можете сказать по поводу констант в файле подключения к базе данных? или тоже лучше использовать переменные?

  Ответить  
 
 автор: cheops   (24.05.2010 в 22:58)   письмо автору
 
   для: Slo_Nik   (24.05.2010 в 21:35)
 

>а что Вы можете сказать по поводу констант в файле подключения к базе данных? или тоже
>лучше использовать переменные?
Вы хотите их объявить там или использовать? Если объявлять - это вероятно наиболее удачное место, так как без открытого соединения они вроде как и не нужны. Если использовать, то тоже проблем нет - такой файл обычно компактный, а и информация о параметрах соединения дальше него никуда не уходит (если, конечно, приложение и сайт использует одну базу данных).

  Ответить  
 
 автор: Slo_Nik   (24.05.2010 в 23:01)   письмо автору
 
   для: cheops   (24.05.2010 в 22:58)
 

>Вы хотите их объявить там или использовать?
Объявлять и использовать. Объявить с определёнными параметрами и в том же файле использовать в функциях подключения. Используется одна база данных для всех файлов

  Ответить  
 
 автор: cheops   (24.05.2010 в 23:56)   письмо автору
 
   для: Slo_Nik   (24.05.2010 в 23:01)
 

Кромолы или подводных камней тут нет. Хотя обычно используют переменные, так как никуда дальшее данные не пойдут и изменить их из вне невозможно, но вообще с точки зрения правильного стиля, то что не должно меняться в ходе работы программы разумнее объявлять в виде константы - это посылает читающему код недвухсмысленный сигнал и экономит усилия при чтении кода.

  Ответить  
 
 автор: Slo_Nik   (25.05.2010 в 00:14)   письмо автору
 
   для: cheops   (24.05.2010 в 23:56)
 

Благодарю за исчерпывающие ответы.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования