- , PDOException.
try {
$pdo = new PDO($dsn, $dbu, $dbp, $opt);
} catch (PDOException $e) {
}
, , , . , , mysql ( ), .
, (, foo;port=123) dsn, NULL ( e ).
function test_mysql_connection($host, $dbname, $username, $password = null) {
if (empty($host) || empty($dbname) || empty($username)) {
throw new InvalidArgumentException('Host, database name and username are required.')
}
try {
$pdo = new PDO(build_mysql_dsn_safely($host, $dbname), $username, $password);
return $pdo;
} catch (PDOException $e) {
return false;
}
}
function build_mysql_dsn_safely($host, $dbname = null, $charset = null, $port = null)
{
static $bad_chars = array(';', '=', "\0");
$vars = array_filter(array(
'host' => $host,
'dbname' => $dbname,
'charset' => $charset,
'port' => $port,
));
foreach($vars as $param => $data) {
foreach ($bad_chars as $bad_char) {
if (strpos($data, $bad_char) !== false) {
throw new InvalidArgumentException(sprintf(
'Connection options "%s" contains an invalid value.', $param
));
}
}
}
return 'mysql:'.implode(';', array_map(function($optkey, $optval) {
return $optkey.'='.$optval;
}, array_keys($vars), $vars));
}
if($pdo = test_mysql_connection($_POST['dbh'], $_POST['dbu'], $_POST['dbn'], $_POST['dbp'])) {
}