Этого недостаточно.1. Вам не хватает файлов cookie, переменная $ _COOKIE.2. Если вы используете $ _REQUEST, у вас проблемы.3. Вы не показывали свои запросы, вы должны заключать каждую переменную в одинарные кавычки, когда вы помещаете их в запрос (особенно, когда предполагается, что данные являются целыми числами, и вы можете подумать, что в этом случае кавычка не нужна,но это было бы большой ошибкой).4. Данные, используемые в вашем запросе, могут поступать из другого источника.
Лучший способ - использовать привязку данных и автоматически экранировать данные драйвером, это доступно в расширении PDO.
Пример кода:
$PDO = new PDO('mysql:dbname=testdb;host=127.0.0.1' $user, $password);
$stmt = $PDO->prepare("SELECT * FROM test WHERE id=? AND cat=?");
$stmt->execute(array($_GET["id"], $_GET["cat"]));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
Вы также можете связать данные, используя строковые ключи:
$stmt = $PDO->prepare("SELECT * FROM test WHERE id = :id AND cat = :cat");
$stmt->execute(array(":id" => $_GET["id"], ":cat" => $_GET["cat"]));
Если вы хотите изучить PDO, вам могут пригодиться следующие вспомогательные функции, которые я использую:
http://www.gosu.pl/var/PDO.txt
PDO_Connect(dsn, user, passwd) - connects and sets error handling.
PDO_Execute(query [, params]) - only execute query, do not fetch any data.
PDO_InsertId() - last insert id.
PDO_FetchOne(query [, params]) - fetch 1 value, $count = PDO_FetchOne("SELECT COUNT(*) ..");
PDO_FetchRow(query [, params]) - fetch 1 row.
PDO_FetchAll(query [, params]) - fetch all rows.
PDO_FetchAssoc(query [, params]) - returns an associative array, when you need 1 or 2 cols
1) $names = PDO_FetchAssoc("SELECT name FROM table");
the returned array is: array(name, name, ...)
2) $assoc = PDO_FetchAssoc("SELECT id, name FROM table")
the returned array is: array(id=> name, id=>name, ...)
3) $assoc = PDO_FetchAssoc("SELECT id, name, other FROM table");
the returned array is: array(id=> array(id=>'',name=>'',other=>''), id=>array(..), ..)
Каждая из функций, извлекающих данные, принимает в качестве массива параметров 2-го аргумента (что необязательно), используется для автоматического связывания данных с SQL-инъекциями.Использование этого было представлено ранее в этом посте.