2013-07-04 3 views
0

им пытается узнать PDOподключения к базе данных с использованием PDO

я сделал этот код для подключения к базе данных

<?php 
$dbhost = "localhost"; 
$dbname = "testcreate"; 
$dbuser = "root"; 
$dbpass = "mysql"; 

    if (!$db) { 
     throw new Exception('failed to connect to mysql') 
    } 

try { 
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8', ''.$dbuser.'', ''.$dbpass.''); 

    } catch (MyFunkyException $e) { 
     echo "Caught exception : ", $e->getMessage(); 
} 
?> 

соединение работает, но когда я пытаюсь сделать ошибку и я хотите, чтобы поймать ошибку

это всплывающее окно ошибки

Fatal error: Uncaught exception 'Exception' with message 'failed to connect to mysql' in C:\Program Files (x86)\Ampps\www\test.php:8 Stack trace: #0 {main} thrown in C:\Program Files (x86)\Ampps\www\test.php on line 8 

вы можете помочь мне исправить ошибку или показывает мне правильный способ сделать это

+0

Это 'PDO' не' POD' - обновленный вопрос :) –

+2

Почему вы объединяете '' '' с '$ dbuser' и' $ dbpass'? – Barmar

+3

Вы проверяете, установлен ли '$ db' _before_, который вы пытаетесь подключить! – Barmar

ответ

-2

попробовать с помощью этого кода ниже

<?php 
$dbhost = "localhost"; 
$dbname = "testcreate"; 
$dbuser = "root"; 
$dbpass = "mysql"; 

try { 
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8', $dbuser, $dbpass); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 
?> 
+0

Спасибо, что работал со мной, но мне пришлось изменить '$ dbh-> setAttribute' на' $ db-> setAttribute' –

+2

Что ??? 'или die (mysql_error())' ??? – sectus

+0

Можете ли вы объяснить, что вы изменили, и почему? – jcsanyi

0

проблема в том, что

  1. Вы пытаетесь бросить исключение перед подключением и вне.
  2. Не нужно бросать собственное исключение, потому что PDO throws its own exception if connection fails.
  3. Также вы бы рассмотрели exception type.
try { 
    $db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf8', ''.$dbuser.'', ''.$dbpass.''); 
} catch (PDOException $e) { 
    echo "Caught exception : ", $e->getMessage(); 
} 

Кроме того, нет необходимости включать PDO на исключения, чтобы поймать исключение. Но если вы пытаетесь использовать to handle errors with exceptions, вы должны включить эту функцию сразу после установления соединения.

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

-1 для исключения эха –

+0

@YourCommonSense, я согласен. Что мне нужно сделать внутри улова в этом примере? – sectus

+0

Ничего. Никакая попытка улова не должна быть здесь вообще. PHP справится с этим лучше. –

-1

Реальная проблема здесь в этой строке:

} catch (MyFunkyException $e) { 

MyFunkyException является имя_классом типа исключения вы хотите поймать.
PDO не выбрасывает исключение MyFunkyException - the docs заявляет, что оно выбрасывает исключение PDOException.

Вы можете это исправить, изменив строку:

} catch (PDOException $e) { 

Или ловить все исключения независимо от типа, как это:

} catch (Exception $e) { 
0

Проблема заключается в том, что вы дон 't хотите поймать что угодно.
По крайней мере, пока вы не хотите, чтобы он только эхо выводил сообщение об ошибке.

Кроме того, исключения не имеют ничего общего с синтаксисом PDO.