PDO Query - Безопасно ли это от внедрения SQL?

Я читал и задавал вопрос о безопасных запросах SQL Injection, и все говорят, что я должен использовать 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 () поэтому я просто включил расширение MYSQL PDO и сделал простой запрос. Итак, это мой ...

Я читал и задавал вопрос о безопасных запросах SQL Injection, и все говорят, что я должен использовать 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 () поэтому я просто включил расширение MYSQL PDO и сделал простой запрос. Итак, это мой ...

Я читал и задавал вопрос о безопасных запросах SQL Injection, и все говорят, что я должен использовать 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); , чтобы узнать, когда у меня есть ошибки.

В любом случае главный вопрос is - безопасен ли этот метод от внедрения SQL?

7
задан Stan 5 February 2011 в 18:59
поделиться