ここで確認できるのは、後に例外をスローするようにPDOに指示することだけです。 接続を開こうとしました。手遅れである可能性が高いです。
代わりにできることは、4番目のパラメーターを使用してそのオプションをコンストラクターに直接送信することです。
try {
$opts = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname,
$dbuser, $dbpasswd, $opts);
} catch(PDOException $e) {
...
それはおそらくあなたの問題を解決するでしょう。
編集: ホスト名がユーザーによって提供されている場合は、PDOコンストラクターに送信する前にホスト名を検証できます。
例:
if (filter_var(gethostbyname($user_provided_host_name), FILTER_VALIDATE_IP)) {
// valid hostname / ip address
}
これはドメイン名localhost
で機能します およびIPアドレス。