Это безопасно для этого случая, но для более общего подхода я бы предпочел использовать mysql_real_escape_string
в сочетании с приведением типа:
$query = "SELECT * FROM products WHERE product_id='" . (int)mysql_real_escape_string($_GET['id']) . "'";
В худшем случае, это приведет к 0
и ускорит также весь злонамеренный ввод. mysql_real_escape_string
может использоваться для всех видов данных, чтобы сделать их безопасными для запросов, что делает его наиболее универсальным из всех функций по эвакуации / санации.
Не вдаваясь в использование подготовленных операторов, вы можете использовать sprintf для создания SQL-кода и автоматической обработки приведения типов:
$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", mysql_real_escape_string($_GET['id']));
Подробнее о синтаксисе см. Запись sprintf в руководстве по PHP.
Это становится еще проще, если вы используете array_map
для экранирования всех $_GET
и $_POST
переменных, тогда вы можете использовать их как:
$_GET = array_map('mysql_real_escape_string', $_GET);
$_POST = array_map('mysql_real_escape_string', $_POST);
$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", $_GET['id']);