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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Что плохого в таком коде?

Сообщения:  [1-10]   [11-18] 

 
 автор: Николай2357   (29.03.2010 в 11:15)   письмо автору
 
   для: Тень*   (29.03.2010 в 09:42)
 

На порядок. Мелочь, а приятно.

  Ответить  
 
 автор: Тень*   (29.03.2010 в 09:42)
 
   для: Николай2357   (29.03.2010 в 09:17)
 

На сколько наносекунд быстрее-то?

  Ответить  
 
 автор: Николай2357   (29.03.2010 в 09:17)   письмо автору
 
   для: vtos   (29.03.2010 в 00:56)
 

Вот так лучше:
$res = mysql_query("SELECT * FROM some_table WHERE id = ". (int)$_GET['id']);

1. Функция mysql_query возвращает указатель на результат ($res), а не запрос ($q)
2. (int) - языковая конструкция, а intval() - функция. А значит первая работает на много быстрее.

  Ответить  
 
 автор: Trianon   (29.03.2010 в 02:09)   письмо автору
 
   для: vtos   (29.03.2010 в 00:56)
 

Да. В таком виде оператор выглядит абсолютно безопасно.

  Ответить  
 
 автор: vtos   (29.03.2010 в 00:56)   письмо автору
 
   для: Trianon   (29.03.2010 в 00:51)
 

То есть, приведенный мною пример следовало бы записать так:
$q = mysql_query("SELECT * FROM some_table WHERE id = ".intval($_GET['id']));

Я правильно понял?

  Ответить  
 
 автор: Trianon   (29.03.2010 в 00:51)   письмо автору
 
   для: vtos   (29.03.2010 в 00:49)
 

еще момент

3) Код, формирующий оператор SQL, я пытаюсь писать так, чтобы ситуация с отсутствием инъекций была ясна из текста самого оператора, и не требовала глядеть куда-то сильно далеко от точки этого текста.

  Ответить  
 
 автор: vtos   (29.03.2010 в 00:49)   письмо автору
 
   для: Trianon   (29.03.2010 в 00:47)
 

Все понятно, благодарю.

  Ответить  
 
 автор: Trianon   (29.03.2010 в 00:47)   письмо автору
 
   для: vtos   (29.03.2010 в 00:42)
 

1) Когда я вижу надпись $_GET['id'] , я изначально считаю, что там находится пользовательский ввод и ничто иное.
2) Я не допускаю присваивания переменным суперглобальных массивов (кроме $_SESSION и $GLOBALS конечно) каких-либо значений. Суперглобальные массивы заполняет php на старте и точка. Единственное исключение из этого правила - откат магических кавычек. Именно откат - до состояния пользовательского ввода. Поэтому это скорее не исключение, а подтверждение правила.

Вышеуказанные строки эту позицию грубо нарушают.

  Ответить  
 
 автор: vtos   (29.03.2010 в 00:42)   письмо автору
 
   для: Trianon   (29.03.2010 в 00:38)
 

А как конкретно можно аргументировать это "не нравится"? Имеется в виду написание кода, его читаемость, зрительное восприятие? Поясните, пожалуйста.

  Ответить  
 
 автор: vtos   (29.03.2010 в 00:40)   письмо автору
 
   для: Саня   (29.03.2010 в 00:09)
 

Спасибо за пояснения!

  Ответить  

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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