Я читал и задавал вопрос о безопасных запросах SQL-инъекций, и все говорят, что я должен использовать PDO, поэтому я просто включил свое расширение MYSQL PDO и сделал простой запрос.
Так что этомой код:
public static function Add($catName, $catDescr = "", $catImgURL = "", $catSubLevel = 0, $catSubID = 0)
{
try
{
include_once "db_config.php";
$DBH = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$STH = $DBH->prepare("INSERT INTO cat (catName, catDescr, catImg, catSubLevel, catSubID)
VALUES ('$catName', '$catDescr', '$catImgURL', $catSubLevel, $catSubID)");
$STH->execute();
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
Так что все работает и кажется безопасным, но когда я делаю что-то вроде этого:
Cat::Add("Test Cat", "' OR 1==1 --");
Это дает мне
Предупреждение:PDOStatement :: execute () [pdostatement.execute]: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '== 1 -', '', 0, 0) 'в строке 2 в www \ mCat.php в строке 25
Полагаю, это потому, что я добавил $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
, чтобы видеть, когда у меня появляются ошибки.
В любом случае, главный вопрос - безопасен ли этот метод от внедрения SQL?