Page 1 of 1
How to verify if a DB exists before a connection attempt
Posted: Thu Mar 23, 2023 11:29 am
by wilmino
I have just migrated to V2023. I love it. (registered user)
I use the same script to connect to several DBs with the same structure. I would like to check if the DBname exists on the server before attempting the connection and customize the error message instead of getting the default DIE() message from PHPmaker.
I NEED HELP WITH THE CONDITION TO PUT IN JUST 1 LINE (the second IF statement)
// Database Connecting event
function Database_Connecting(&$info)
{
if(isset($_POST['db_id'])){
$_SESSION['db'] = 'db_name_'.$_POST['db_id'];
}
// I NEED HELP WITH THE CONDITION TO PUT IN THIS 1 LINE BELOW
if( ******The database $_SESSION['db'] does NOT exits****** ){
$_SESSION = array();
$_SESSION[SESSION_FAILURE_MESSAGE] = "Database ID not found";
return false;
}else{ $info["host"] = "locahost";
$info["user"] = 'root';
$info["password"] = 'password';
$info["dbname"] = $_SESSION['db'];
}
}
I simplified the code, but in real life I make sure that one User cannot switch to an unauthorized DB even if exist.
Re: How to Verify if a DB exists before a connection attempt
Posted: Thu Mar 23, 2023 11:36 am
by mobhar
I don't think there is such feature to check the database name first before attempting to connect to it.
Since the Linked Tables is a feature to connect to the different databases, then we assume that we have already known which database should we want to connect before creating the connection for that Linked Tables.
Re: How to Verify if a DB exists before a connection attempt
Posted: Thu Mar 23, 2023 11:45 am
by wilmino
How to catch the connection failure error to customize it and redirect the user to the login page again (return false) smoothly?
Re: How to Verify if a DB exists before a connection attempt
Posted: Thu Mar 23, 2023 11:54 am
by mobhar
You may customize the generated views/Error.php file that suits your needs. Or, perhaps you may create your own Extension to handle that situation.
Re: How to Verify if a DB exists before a connection attempt
Posted: Thu Mar 23, 2023 12:51 pm
by wilmino
Thank you.
I'll have to make sure I do not genarate it again after customization.
Re: How to Verify if a DB exists before a connection attempt
Posted: Thu Mar 23, 2023 3:02 pm
by arbei
wilmino wrote:
How to catch the connection failure error...
Since you have the connection info, you may try connect with the connection info in a catch block to test. But it may not be a good idea, you don't want to connect unnecessarily. You better save the valid database names somewhere (e.g. in a .php file).
Re: How to verify if a DB exists before a connection attempt
Posted: Fri Mar 24, 2023 1:45 am
by wilmino
Hi all,
I still cannot CATCH the exception when the DB does not based on the id_db given by the user:
PATH\vendor\doctrine\dbal\src\Driver\API\MySQL\ExceptionConverter.php(101): An exception occurred in the driver: SQLSTATE[HY000] [1045] Access denied for user 'user_id_db_value'@'localhost' (using password: YES)
There is someting very wrong with my code.
try {
function(){if (isset($_SESSION['id_db'])){ ////// Verify id_db is POSTED and set as $_SESSION['id_db'] above
$_SESSION['db']='dbname_'.$_SESSION['id_db'];
$_SESSION['user']='mydbuser'.$_SESSION['id_db'];
$_SESSION['pass']='mydbpass'.$_SESSION['id_db'];
$info["host"] = "127.0.0.1";
$info["user"] =$_SESSION['user'];
$info["password"] =$_SESSION['pass'];
$info["dbname"] = $_SESSION['db'];
}} or throw new Exception('foo');
} catch (Exception $e) {
$info[] = array();
$_SESSION = array();
$_SESSION[SESSION_FAILURE_MESSAGE] = "The DB ID is not found.";
return false;
} finally {
return true;
}
Re: How to verify if a DB exists before a connection attempt
Posted: Fri Mar 24, 2023 10:38 am
by arbei
You have syntax error, you cannot put a function in your code like that.