PDO построить в случае отказа

0

Я использую такую функцию подключения pdo:

class MyPDO extends PDO{

    const DB_HOST='localhost';
    const DB_PORT='3306';
    const DB_NAME='testdb';
    const DB_USER='root';
    const DB_PASS='root';

    public function __construct($options=null){
        parent::__construct('mysql:host='.MyPDO::DB_HOST.';port='.MyPDO::DB_PORT.';dbname='.MyPDO::DB_NAME,MyPDO::DB_USER,MyPDO::DB_PASS,$options);
    }

    public function query($query){ //secured query with prepare and execute
        $args = func_get_args();
        array_shift($args); //first element is not an argument but the query itself, should removed

        $reponse = parent::prepare($query);
        $reponse->execute($args);
        return $reponse;

    }

}

Теперь соединение и запрос работают отлично, и все отлично, но в случае, если сервер mysql работает по сценарию, я использую эту функцию соединения, просто перестает работать. Вместо этого я хотел бы, чтобы он возвращал некоторое сообщение в случае, если сервер mysql не ответил или настройки mysql установлены неправильно.

Я пробовал делать что-то вроде

if(new MyPDO===false){echo "The database is down currently. Please try again later."}

Но это не работает. Пожалуйста, помогите мне. Все, что мне нужно, это показать сообщение в случае, если соединение mysql недоступно, а не разбивать весь скрипт и показывать пустую страницу (например, в настоящее время).

Теги:
pdo

2 ответа

1
Лучший ответ

Использование try catch в родительском классе при построении PDO должно работать:

try{
   //your pdo construction
   $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);  
}catch(PDOException $e){
    echo "Error"; // you could also add $e->getMessage(); to display a message why your try catch returned false
}

Или вы можете сделать что-то вроде этого:

if($yourpdovar instanceof PDO) {
   //succeeded message.
}else{
   //error message
}

Этот код проверяет, является ли ваша переменная переменной PDO. Это просто, и вы можете разместить его везде в своем коде.

  • 0
    При попытке поймать я должен закрыть соединение после завершения кода? Например, в любом месте, где мне нужно соединение с БД, я делаю $ db = new MyPDO; некоторые коды и запросы и т. д., и чем $ db = null; так что я не оставляю никаких открытых соединений
  • 0
    Неважно, продолжая использовать $ db = null, как обычно в конце кода. Все отлично работает
-1

Из документации PHP PDO.

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Поймай ошибку и сделай все, что хочешь. Отобразить страницу, отобразить ошибку, перенаправить, что угодно.

  • 2
    Вы должны включить объяснение кода и того, что он делает, а не просто пример кода в качестве ответа.
  • 0
    Кажется, довольно ясно.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню