2016-10-24 2 views
3

Главный вопрос:Почему этот PHP connect_error не работает?

Я пытаюсь напечатать ошибку на веб-странице, если соединение с сервером MySQL не производится. Для этого я написал неправильное имя базы данных $this->dbname = 'dbinds'; (актуально dbind). Но заявление die не выполняется. Когда я открываю страницу, она просто не загружается. Он показывает ошибку: Сайт localhost не работает. Я делаю что-то неправильно?

Другой вопрос: Я прокомментировал блок кода обработки исключений. Теперь, когда я его использую, он работает нормально. Исключение выдается, если есть какая-то ошибка. Но если вы видите, я написал второй код кода исключения исключения ниже $this->abc=$this->con->prepare();. Но это не сработает, если я напишу это ниже $this->abc->execute();

Есть ли способ бросить исключения для каждого утверждения? (Как, подготовить, связать и выполнить).

Вот мой код:

<?php 
class Database 
{ 
    private $servername; 
    private $username; 
    private $password; 
    private $dbname; 
    public $abc; 
    public $con; 
    public function __construct() 
    { 
     // ini_set('display_errors',1); error_reporting(E_ALL); 
     $this->servername = 'localhost'; 
     $this->username = 'root'; 
     $this->password = ''; 
     $this->dbname = 'dbinds'; 
     $this->con = mysqli_connect($this->servername, $this->username, $this->password, $this->dbname); 
     if($this->con->connect_error){ 
      die("Something: ".connect_error()); 
     } 
     /*if(!$this->con) { 
      throw new Exception("Connection can't be made"); 
     }*/ 
     return $this->con; 
    } 

    public function insert_data($emp_name, $emp_dept, $emp_salary) 
    { 
     $this->abc=$this->con->prepare("INSERT INTO table1(name, email, password) VALUES(?, ?, ?)"); 
     //FOLLOWING IF BLOCK 
     /*if(!$this->abc) { 
      throw new Exception("Couldn't insert data"); 
     }*/ 
     $this->abc->bind_param("ssi", $emp_name, $emp_dept, $emp_salary); 
     $this->abc->execute(); 

    } 
} 
?> 
<?php 
$conobj=new Database(); 
$query=$conobj->insert_data("vvsdf", "vsomeone", 3445); 
/*try{ 
    $conobj=new Database(); 
    $query=$conobj->insert_data("vvsdf", "vsomeone", 3445); 

} catch (Exception $e) { 
    //echo "Service unavailable"; 
    echo "message: " . $e->getMessage(); // not in live code obviously... 
    // echo $e; 
    exit; 
}*/ 
?> 
+0

Я сделал то же самое. Но это не работает. –

+0

Да, это будет работать, я знаю. Не могли бы вы рассказать о 2-м вопросе? –

ответ

1

Вы должны решить, использовать ли вы procedular или object oriented version of mysqli.

Однако, до сих пор вы можете изменить свой, если Condtion на:

if (!$this->con) { 
    die(mysqli_connect_error()); 
} 

он должен работать , Вы также можете увидеть the example on manual

+0

'connect_error()' не эхо, потому что я написал процедурные функции для подключения? –

+0

Кроме того, он работает, но после изменения условия в выражении if на ваш. Почему это? –

+0

, потому что я проверяю, возвращает ли mysqli_connect объект подключения, а если нет, значит, есть ошибка, поэтому я показываю его. – Robert