За последние 24 часа нас посетили 17670 программистов и 1615 роботов. Сейчас ищут 1862 программиста ...

Проверка статуса подключения к MySQL, БД N, и наличия таблиц

Тема в разделе "PHP для новичков", создана пользователем Moxs, 16 май 2017.

  1. Moxs

    Moxs Новичок

    С нами с:
    15 апр 2017
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте. Мне необходимо на страницу выводить информацию ввиде ON(Active) или OFF(Not active) о статусе подключения к БД, если не возможно подключиться(неверный логин, пароль, хост) выводить OFF. Аналогично проверка наличия БД N, и таблиц.

    Я думал создавать подключение к MySQL через функцию, затем проверять выполнилась функция или нет и выводить соответсвующий статус. Но мне сразуже выводит ошибку о подключении к бд.

    Помогите пожалуйста, натолкните на мысль или покажите пример. Спасибо )
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    что за велосипед надумал?
    используй конструкцию кода try { подключение БД ON } catch( ... ) {... OFF }
     
    Moxs нравится это.
  3. Moxs

    Moxs Новичок

    С нами с:
    15 апр 2017
    Сообщения:
    14
    Симпатии:
    0
    Я делаю кое-какую программку для расчетов. Мне необходимо вывести информацию о статусе програмки(установлена она или нет), если нет то произвести установку(создать БД, залить таблицы из файла);
    Спасибо за информацию. Не знал про исключения )) Попытаюсь реализовать и отпишу если получится )
     
  4. Moxs

    Moxs Новичок

    С нами с:
    15 апр 2017
    Сообщения:
    14
    Симпатии:
    0
    Что-то у меня не получается. Сделал функцию (тут с ошибочным именем пользователя)
    выводит стандартную ошибку: Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'roott'@'localhost' (using password: NO) in C:\webserver\OpenServer\domains\test2\index.php on line 17
    и снизу Status OFF

    Но мне надо чтобы стандартной ошибки небыло, подскажите как избавиться?
    p.s.
    можно отключить показ ошибок через htaccess и все будет нормально отображаться, но это не правильно, хотелось бы правильный вариант решения проблемы.
    про mysqli знаю, потом буду косяки исправлять )




    PHP:
    1. function db_status() {
    2.  
    3. //настройки подключения к базе данных
    4.  
    5.     $hostname = "localhost";
    6.     $username = "roott";
    7.     $password = "";
    8.     $dbname   = "plan";
    9.  
    10.     //языковые настройки
    11.     setlocale(LC_ALL, 'ru_RU.CP1251');
    12.  
    13.     //подключение к БД
    14.     try {
    15.         $connect = mysql_connect($hostname, $username, $password);
    16.  
    17.         if (!$connect)
    18.         {
    19.         throw new Exception('0');
    20.         } else throw new Exception('1');
    21.     }
    22.     catch (Exception $ex) {
    23.         //Выводим сообщение об исключении.
    24.         if ($ex->getMessage() == '0')
    25.             echo "Status OFF";
    26.         elseif ($ex->getMessage() == '1') {
    27.             echo "Status ON";
    28.         }
    29.     }
    30.  
    31.  
    32.     //mysql_query('SET NAMES cp1251');
    33.  
    34. }
     
    #4 Moxs, 16 май 2017
    Последнее редактирование: 16 май 2017
  5. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    маленько поигрался, потом все таки дописал exit;
    так как запросы кБД все поломаны будут и как не крути ошибку словим если заюзаем остальной участок кода.
    PHP:
    1. <?php
    2.  
    3. Class SQL
    4. {
    5.     const HOST = 'localhost';
    6.     const DB_NAME = 'blogpric_base';
    7.     const USER = 'roott';
    8.     const PASSWORD = '';
    9.     protected static $INSTANCE = NULL;
    10.  
    11.     public static function instance()
    12.     {
    13.         if ( self::$INSTANCE === NULL )
    14.         {
    15.             try
    16.             {
    17.                 self::$INSTANCE = new PDO( 'mysql:host=' . self::HOST . ';dbname=' . self::DB_NAME . ';charset=utf8', self::USER, self::PASSWORD );
    18.                 self::$INSTANCE -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    19.             }
    20.             catch ( Exception $e )
    21.             {
    22.                 echo 2222;
    23.                 exit; # <- тут раки зимуют
    24.            }
    25.         }
    26.      
    27.         return self::$INSTANCE;
    28.     }
    29.     public static function __callStatic( $method, $args )
    30.     {
    31.         return call_user_func_array ( [ self::instance(), $method ], $args );
    32.     }
    33.     public static function P( $sql, $args = [] )
    34.     {
    35.         $stmt = self::instance() -> prepare( $sql );
    36.         $stmt -> execute( $args );
    37.      
    38.         return $stmt;
    39.     }
    40. }
    --- Добавлено ---
    Эм... скрипт и все прочее за все и всегда utf-8 без BOM
    Удали строку, преобразуй скрипт, БД тоже в стандарт
    --- Добавлено ---
    мм рядом с протектором можно дописать
    public static $STATUS = false;

    Код (Text):
    1. self::$INSTANCE -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    2. self::$STATUS = true;
    --- Добавлено ---
    сразу ясно будет что в катче офф, можно и не проверять.
     
    Moxs нравится это.