Исключение PDO не выбрасывается

Я новичок в PDO, и некоторые вещи об этом смущают меня, ямы попытались создать тестовую функцию, чтобы увидеть, будет ли выброшено исключение для неверного запроса, но ничего не выдается.

вот код

getMessage(); 
        }
    }

    public function test(){
        try{
            $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
            $DBH->prepare('DELECT id FROM users');  
        }
        catch(PDOException $e) {  
            echo $e->getMessage();  

        }
    }

};

/* Create database connection */
$db = new DB;
$db->test();

?>
 mk_8913 окт. 2012 г., 13:21
@feeela это должно быть SELECT, а не DELECTA
 mk_8913 окт. 2012 г., 13:24
@JvdBerg Я не знаюне понимаю, что вы имеете в виду, запросDELECT id FROM users является недействительным
 JvdBerg13 окт. 2012 г., 13:23
select id from users не является недействительным?
 ashgromnies02 янв. 2014 г., 21:05
mk_89, что 'это его точка зрения, онпытается проверить исключения.

Ответы на вопрос(2)

Там нет исключений, потому что выне производит один. Я думаю, вы должны увидеть предупреждение, ошибку или что-то, говорящее, что переменная не определена. Проверьте настройки отчетов об ошибках.

Вtest, ты используешь$DBH, но он не существует в локальном стеке, но является членом объекта. Поэтому вы должны использовать$this->DBH = new PDO(..) назначить значение члену объекта в методе конструктора и$this->DBH->setAttribute(...) вtest метод его использования.

Вот, пожалуйста, исправленная версия:

DBH = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS);   
        }
        catch(PDOException $e) {  
            echo $e->getMessage(); 
        }
    }

    public function test(){
        try{
            $this->DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
            $this->DBH->prepare('DELECT id FROM users');  
        }
        catch(PDOException $e) {  
            echo $e->getMessage();  

        }
    }

};

/* Create database connection */
$db = new DB;
$db->test();
 usoban13 окт. 2012 г., 13:34
ну, наверное, потому что тыУ меня нет исключений. Попробуйте какой-нибудь бессмысленный запрос, например, $ this->dbh->подготовить('фу бар ')
 mk_8913 окт. 2012 г., 13:30
Я дал этому выстрел, и ничего не возвращается.
Решение Вопроса

Помимо отсутствующих ссылок на$this дескриптора вашей базы данных, вам нужно сообщить PDO, что он не должен эмулировать готовится. Код нижебудут бросить исключение, как это:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'DELECT id ИЗ пользователей в строке 1

class DB{
    private $DBH; 

    public function DB(){
        try{
            $this->DBH = new PDO("mysql:host=localhost;dbname=movies", 'root', 'jsat12');   
            $this->DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false );
      }
        catch(PDOException $e) {  
            echo $e->getMessage(); 
        }
    }

    public function test(){
        try{
            $this->DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
            $this->DBH->prepare('DELECT id FROM users');  
        }
        catch(PDOException $e) {  
            echo $e->getMessage();  

        }
    }

};

/* Create database connection */
$db = new DB;
$db->test();
 mk_8913 окт. 2012 г., 13:37
Это, наконец, бросил исключение

Ваш ответ на вопрос