Использование PDO и MYSQLi является хорошей практикой для предотвращения инъекций SQL, но если вы действительно хотите работать с функциями и запросами MySQL, было бы лучше использовать
$unsafe_variable = mysql_real_escape_string($_POST['user_input']);
Есть больше возможностей для предотвращения этого: например, идентификация - если ввод представляет собой строку, число, символ или массив, есть так много встроенных функций для обнаружения этого. Кроме того, было бы лучше использовать эти функции для проверки входных данных.
$unsafe_variable = (is_string($_POST['user_input']) ? $_POST['user_input'] : '');
$unsafe_variable = (is_numeric($_POST['user_input']) ? $_POST['user_input'] : '');
И гораздо лучше использовать эти функции для проверки входных данных с помощью mysql_real_escape_string
.
[Редактирование: Я предполагаю, что Вы хотите использовать макросы времени компиляции для определения, какая среда Вы идете. Возможно, Вы хотите определить, работаете ли Вы на Вине в соответствии с Linux или чем-то вместо Windows, но в целом, Ваш компилятор предназначается для определенной среды, и это - или Windows (DOS), или это не, но это редко (никогда?) оба.]
Некоторые компиляторы предлагают макросы для указания на среду сборки Windows. Но они будут варьироваться от компилятора до компилятора, и даже на том же компиляторе в Windows, если целевая среда будет не исключительно окна. Обычно это __WIN32__
, но не всегда.
#if defined (__WIN32__)
// Windows stuff
#endif
Иногда это может быть _WIN32
, __CYGWIN32__
, или возможно просто индикатор (_MSC_VER
).
компилятора, Если Вы знаете среду, Вы будете создавать в (из make-файла) тогда, можно обычно передавать в #define
на командной строке, как" g++ -D __WIN32__ yourfile.c
".
Существует много различных способов обнаружить компиляцию, хост и среды выполнения. Все в зависимости от точно, что Вы хотите знать. Существует три широких типа сред:
, Если Вы , кросс-компиляция , среда сборки и серверная среда может полностью отличаться (это распространено при создавании встраиваемых приложений, но не очень распространенное при создании приложений рабочего стола/сервера), и Вы обычно не можете работать, скомпилированный двоичный файл в системе раньше компилировал его. Иначе серверная среда должна быть совместима со средой сборки: например, создавая приложение на XP, который будет работать на Vista.
макросы препроцессора C не могут использоваться, чтобы сказать Вам детали хост-системы (т.е. на чем Вы работаете); они могут только сказать Вам, для чего был скомпилирован код. В случае окон два самых важных макросов:
_MSC_VER
говорит Вам, что Вы программа компилируетесь с Microsoft Visual C/C ++. Ну, почти. _MSC_VER
также определены при использовании компилятора C++ Intel, который предназначается, чтобы быть общедоступной заменой для Visual C++. существует набор других макросов, описанных в документации Visual Studio.
, Если Вы хотите знать, какую точную версию Windows Вы используете, необходимо будет использовать функции времени выполнения, такие как GetVersion () (как описано в других ответах).
Вы могли бы получить более определенные ответы, если бы Вы сказали нам точно, на что Вы хотите проверить.
% touch foo.C ; g++ -dM -E foo.C
сделает хорошее задание списка всех макросов (#define), автоволшебно определенный для Вас Вашим [машина, конкретная] g ++ компилятор.
могло бы быть что-то подобное для компиляторов Microsoft...
При выполнении MS Windows предназначенный код, можно назвать GetVersion () или GetVersionEx () для большего количества информации, и определить вариант Windows, на котором Вы работаете.
Для большего количества информации определяют объем информации о MSDN
http://msdn.microsoft.com/en-us/library/ms724451 (По сравнению с 85) .aspx
Ссылки, упомянутые до сих пор, указывают на информацию во время компиляции. Можно установить флаги в тех сегментах кода во время компиляции.
Однако я думаю, что Вы спрашиваете, больше вроде, "Под какой версией окон я работаю? "не "Я компилируюсь для выполнения под окнами?" Я надеюсь, что это - корректное предположение.
Под C#, это относительно просто. Можно сослаться на Систему. Среда. OSVersion тогда смотрят под "Платформой".
Однако Вы спрашиваете о C++. Какой компилятор Вы используете? Это имеет большое значение относительно того, как Вы проверяете на версию операционной системы, поскольку нет никакого единственного стандарта для того, чтобы получить эту информацию (что я нашел).
Под Visual C++, используйте Google для нахождения информации о GetVersion/GetVersionEx. Оба дадут Вам структуры, которые содержат информацию о текущей версии Windows, под которым запускает программа.
MSVC ++ компилятор (не windows.h
) определяет _WIN32
для весь сборки, таким образом, это - более безопасный макрос для проверки. Компилятор MinGW gcc делает также. Любой Win32 предназначения среды кросс-компиляции должен устанавливать это также.
На самом деле я пошел бы со Средой. getenv () является стандартной библиотечной функцией и так является, вероятно, единственным потенциально портативным способом сделать это. Прием выясняет, какие переменные уникальны для всех Ose. Windows имеет ComSpec, appdata, Windir, корневой каталог и systemdrive, который должен быть установлен. Вы могли также strstr переменная пути для WINDOWS или WINNT, но это не могло бы быть точно. Я не эксперт по оболочке/Солярису/MacOS Linux, таким образом, кто-то еще мог бы быть в состоянии сказать Вам, какие "стандартные" переменные среды существуют в тех Ose. CygWin может вызвать Вас некоторые проблемы, также.
Это, вероятно, зависело бы от компилятора, который Вы используете, но попытка:
#ifdef WIN32
...
#endif
Макросы, такие как те упомянутые выше скажут Вам, если Вы будете программировать, был , скомпилировал на (или скорее для ) машина Windows, не , если это выполнение на машине окон.
, Если Вы пишете что-то, что является полностью агностиком платформы (т.е. это только обрабатывает открытие / читающий / обрабатывающий / пишущий), потоки файла.. необходимо будет сделать некоторый тест как открытый файл, который должен существовать, если компьютер запускает Windows. Если Ваша программа использует только стандарт stdio, математику, и т.д. это будет иметь место.
Иначе, если Ваш код содержит Windows определенные системные вызовы, его просто не попытка работать на какой-либо другой платформе.
Вы могли записать некоторый макрос как:
#define RUNNING_ON_WINDOWS ( ... some test )
Просто не используют его для условной компиляции, т.е.:
if (RUNNING_ON_WINDOWS) {
...
} else
printf("Windows Required\n");
Эти три строки помогут вам в обнаружении, сначала мы или большинство предопределенных оконных подсказок вместе в одно определение макроса OS_WIN:
#if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__) #define OS_WIN #endif
Затем вы можете проверить это с помощью препроцессора ifdef:
#ifdef OS_WIN //Windows specific stuff #else //Normal stuff #endif