2014-09-07 2 views
0

Я только что создал строки кода для вставки некоторых данных в базу данных с использованием PDO с базой данных MySQL. код выглядит следующим образом:Исключение в PDO PHP не работает

define("cstring", "mysql:host=localhost;dbname=perpus2014"); 
define("username", "root"); 
define("password", ""); 

class database { 
    protected $koneksi; 
    protected function db() { 
     try { 
      $koneksi = new PDO(cstring, username, password); 
     } catch (Exception $e) { 
      echo $e->getmessage(); 
     } 
     return $koneksi; 
    } 
} 

//------------------------------------ 

class adm extends database { 
    private $nama; 
    private $password; 
    private $conn; 

    function __construct() { 
     $this->conn = $this->db(); 
    } 

    function set($value1, $value2) { 
     $this->nama = $value1; 
     $this->password = $value2; 
    } 

    private function getname() { 
     return $this->nama; 
    } 

    private function getpass() { 
     return $this->password; 
    } 

    public function insert() { 
     try { 
      $save = $this->conn->prepare("insert intdo tes (nama,password) values (?,?)"); 
      $save->bindParam(1, $this->getname()); 
      $save->bindParam(2, $this->getpass()); 
      $save->execute(); 
      return true; 
     } catch (PDOException $e) { 
      print $e->getMessage(); 
      return false; 
     } 
    } 
} 

код был успешно вставлен строки в базу данных, но когда я попытался пропустить-написание кода, как «bindParam» в «blindParam» или «вставить» в «insseert» или независимо, код продолжал давать 1 в виде логического возврата после $ save-> execute();

Что случилось с моим исключением, почему он не распечатывал сообщение об ошибке и не возвращал false булевым?

Обновлено, я отправил полный код.

+0

Поскольку запуск существующего метода является фатальной ошибкой php, это не имеет ничего общего с 'PDOException' – zerkms

+0

Я изменил исключение PDOException на исключение, все еще не работал. – januaryananda

+0

В каких ошибках работает PDOException? – januaryananda

ответ

0
  1. Если вы хотите, чтобы убедиться, что PDO бросает исключение, когда что-то плохое происходит, убедитесь, что, чтобы установить режим ошибок для исключения, в вашем случае: $koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  2. В конструкторе database класса вы можете не создать объект database и вернуть null. На мой взгляд, если ошибка возникает, ее не следует обрабатывать.
  3. Если вы вызываете несуществующие методы на объект, тогда ответственность за обработку ошибок не означает, что они являются интерпретаторами. Если класс PDO не имеет метода inseeert, как он должен отвечать за создание ошибки, если вы попытаетесь это назвать? PDOException s только поднял, если есть ошибка в коде базы данных, например .: соединение не удается, ошибка синтаксиса в запросе, и т.д ...

Update: Для третьих предложений:

$pdo = new PDO(/* params here */); 
$pdo->queeryy('SELECT * FROM test'); 

В этом случае ошибка будет вызвана интерпретатором, поскольку класс PDO не имеет метода queeryy.

$pdo->query('SLECT * FROM test'); 

Теперь здесь класс PDO может вызвать исключение, потому что ваш код (с PHP точки зрения) является правильным, но вы указали неправильный параметр (строка запроса с плохим синтаксисом).

Надеюсь, это поможет. Также, пожалуйста, прочитайте около Exceptions, если все еще неясно, для чего их можно использовать.

+0

Я сделал первое предложение, добавив $ koneksi-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); Я обнаружил, что это вызвало проблему, почему исключение не работает. Я действительно не понимаю третьего предложения, не могли бы вы привести мне пример? Спасибо, я новичок. – januaryananda