Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Expected exception message not displaying in PHP

Tags:

php

mysql

I want to write a program with database connectivity and exception handling in PHP. If I insert an incorrect username then it should display its corresponding error message, and if I insert the incorrect database it should display its corresponding error message.

But in the following program whether I insert incorrect database or incorrect username it only displays the message "Could not connect to database".

<?php
   $hostname = "localhost";
   $username = "root1";
   $password = "";
   $database = "php_thenewboston";
   $conn = mysqli_connect($hostname,$username,$password);
   $conn_db = mysqli_select_db($conn,$database);
   class ServerException extends Exception{}  
   class DatabaseException extends Exception{}
   try{
       if(!$conn){
           throw new ServerException('Could not connect to server.');
       }elseif(!$conn_db){
           throw new DatabaseException('Could not connect to database.');
       }else{
           echo "Connected.";
       }
   }catch(ServerException $ex){
       echo "Error :".$ex->getMessage();        
   }catch(DatabaseException $ex){
       echo "Error :".$ex->getMessage();
   }
?>

I am a beginner in PHP. Please comment below for any query.

EDIT

As asked by @Hatef Below is the var_dump of $conn when username is incorrect, password is correct and database name is correct

object(mysqli)#1 (19) {
  ["affected_rows"]=>
  int(-1)
  ["client_info"]=>
  string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $"
  ["client_version"]=>
  int(50012)
  ["connect_errno"]=>
  int(0)
  ["connect_error"]=>
  NULL
  ["errno"]=>
  int(1044)
  ["error"]=>
  string(68) "Access denied for user ''@'localhost' to database 'php_thenewboston'"
  ["error_list"]=>
  array(1) {
    [0]=>
    array(3) {
      ["errno"]=>
      int(1044)
      ["sqlstate"]=>
      string(5) "42000"
      ["error"]=>
      string(68) "Access denied for user ''@'localhost' to database 'php_thenewboston'"
    }
  }
  ["field_count"]=>
  int(0)
  ["host_info"]=>
  string(20) "localhost via TCP/IP"
  ["info"]=>
  NULL
  ["insert_id"]=>
  int(0)
  ["server_info"]=>
  string(21) "5.5.5-10.1.16-MariaDB"
  ["server_version"]=>
  int(50505)
  ["stat"]=>
  string(132) "Uptime: 1072  Threads: 1  Questions: 16  Slow queries: 0  Opens: 18  Flush tables: 1  Open tables: 11  Queries per second avg: 0.014"
  ["sqlstate"]=>
  string(5) "00000"
  ["protocol_version"]=>
  int(10)
  ["thread_id"]=>
  int(9)
  ["warning_count"]=>
  int(0)
}

Below is the var_dump of $conn when the username is correct, password is correct and database name is incorrect.

object(mysqli)#1 (19) {
  ["affected_rows"]=>
  int(-1)
  ["client_info"]=>
  string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $"
  ["client_version"]=>
  int(50012)
  ["connect_errno"]=>
  int(0)
  ["connect_error"]=>
  NULL
  ["errno"]=>
  int(1049)
  ["error"]=>
  string(36) "Unknown database 'php_thenewboston1'"
  ["error_list"]=>
  array(1) {
    [0]=>
    array(3) {
      ["errno"]=>
      int(1049)
      ["sqlstate"]=>
      string(5) "42000"
      ["error"]=>
      string(36) "Unknown database 'php_thenewboston1'"
    }
  }
  ["field_count"]=>
  int(0)
  ["host_info"]=>
  string(20) "localhost via TCP/IP"
  ["info"]=>
  NULL
  ["insert_id"]=>
  int(0)
  ["server_info"]=>
  string(21) "5.5.5-10.1.16-MariaDB"
  ["server_version"]=>
  int(50505)
  ["stat"]=>
  string(132) "Uptime: 1417  Threads: 1  Questions: 18  Slow queries: 0  Opens: 18  Flush tables: 1  Open tables: 11  Queries per second avg: 0.012"
  ["sqlstate"]=>
  string(5) "00000"
  ["protocol_version"]=>
  int(10)
  ["thread_id"]=>
  int(10)
  ["warning_count"]=>
  int(0)
}
like image 414
R K Avatar asked May 03 '17 17:05

R K


People also ask

How to raise an exception in PHP?

Throwing a generic PHP exception is almost as simple as it sounds. All it takes is to instantiate an exception object—with the first parameter of the Exception constructor being the error message—and then, "throw" it.

What is exception in PHP?

An exception is an object that describes an error or unexpected behaviour of a PHP script. Exceptions are thrown by many PHP functions and classes. User defined functions and classes can also throw exceptions. Exceptions are a good way to stop a function when it comes across data that it cannot use.


2 Answers

By Default, mysql automatically throws the exception. To throw the exception manually, you need to write the below line at top of file This will throw exception even on mysqli_connect. So you need to add the connect method in try block. mysqli_report(MYSQLI_REPORT_STRICT);

UPDATE: In your case, don't write the above line, change the hostname & you will get the server error in your catch block.

like image 62
Agam Banga Avatar answered Oct 02 '22 22:10

Agam Banga


As per your code, you sounds a good oops programmer. Well every programming language has its own set of rules & standards.

Lets go through your code

   $conn = mysqli_connect($hostname,$username,$password);
   $conn_db = mysqli_select_db($conn,$database);
   class ServerException extends Exception{}  
   class DatabaseException extends Exception{}

Here you are trying to initiate a connection. Then in your try catch block you are checking the connectivity.

Put you connection also in your try catch block & catch the exception.

For example :

try
{
    if ($db = mysqli_connect($hostname_db, $username_db, $password_db))
    {
        //do something
    }
    else
    {
        throw new Exception('Unable to connect');
    }
}
catch(Exception $e)
{
    echo $e->getMessage();
}
like image 26
rajatsaurastri Avatar answered Oct 02 '22 23:10

rajatsaurastri