I try to play with exceptions in PHP for my first time, but it does not go very well.
I have a variable named dsn, this contains the connection string of PDO / MySQL.
When I use var_dump
on dsn it returns 'null', so i can assume that my dsn is empty.
But when I look in my code, the value of DSN is checked and when it equals to NULL it should throw an exception.
But, PHP does not throw an exception.
I already have checked for a typo, but dns does not exist in my code ;)
And due to this, I also can't connect to my database because I give PDO an empty DSN-string.
My code:
<?php
try {
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'pridec';
$charset = 'utf8';
if ($host == NULL) {
throw new Exception("Hostname is empty or is equal to null");
}
if ($user == NULL) {
throw new Exception("Username is empty or is equal to null");
}
if ($db == NULL) {
throw new Exception("Database is empty or is equal to null");
}
if ($charset == NULL) {
throw new Exception("Charset is empty or is equal to null");
}
//Neither of these variables are working
//$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
//$dsn = "mysql:dbname=$db;host=$host;charset=$charset";
$dsn = "mysql:dbname=$db";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
if ($dsn = NULL) {
throw new Exception("DSN can *never* be empty or equal to null / zero");
}
try {
$pdo = new PDO($dsn, $user, $pass, $opt);
} catch (PDOException $pdoe) {
echo "<pre>";
var_dump($dsn);
var_dump($pdoe);
echo "</pre>";
throw new Exception("Cannot connect to the database because: ".$pdoe->getMessage());
}
require "classes/account.class.php";
$account = new account($pdo);
} catch (Exception $e) {
echo "An error occured:<br>";
echo $e->getMessage();
} finally {
ini_set("session.hash_function","sha512");
session_start();
}
?>
I hope you guys can find the error to help me.