PDA

Просмотр полной версии : pdoexception


sQula
30.10.2018, 16:06
Беда в чем, при потере конекта сайта к бд сервера, вылезает ошибка

куда копать, и что писать

дабы данные кэшировались, и сайт не падал при потери конекта.

Код:



PDOException in Connector.php line 47:
SQLSTATE[HY000] [1044] Access denied for user '****'@'localhost' to database '******'


Код:



public function createConnection($dsn, array $config, array $options)
{
$username = array_get($config, 'username');

$password = array_get($config, 'password');

return new PDO($dsn, $username, $password, $options);
}

Gaikotsu
30.10.2018, 19:57
try/catch и все такое во всех нужных местах - в соединении с бд и т.д.

Logan22
30.10.2018, 21:26
дабы данные кэшировались, и сайт не падал при потери конекта.


тогда лучше писать на чистом Go, и не юзать вонючий Laravel. Если ты думаешь что таким способом выиграешь в производительности, то ошибаешься, ты уже проиграл в производительности ещё до старта гонки.

Вообще для начала проверь правильная ли структура в $dns, а во вторых проверь привилегии пользователя в MySQL.

Desquire
30.10.2018, 21:47
тогда лучше писать на чистом Go, и не юзать вонючий Laravel. Если ты думаешь что таким способом выиграешь в производительности, то ошибаешься, ты уже проиграл в производительности ещё до старта гонки.
Вообще для начала проверь правильная ли структура в $dns, а во вторых проверь привилегии пользователя в MySQL.


Тс - ты хочешь исправить продлему, или ее избежать? Это коннент к какой бд? Основной блок сайта или екстернал сервер?

Ну не скажи, уверен все проблемы в правильности использования.

Первый запрос в гугле, и увидел что можно связать лару и варниш без особых проблем, в итоге до 100 мс будет возвращаться страница.

Часто легче исаолиспольз уже готоаыг решения... Зависит от бюджета и хотелки

sQula
30.10.2018, 22:15
тогда лучше писать на чистом Go, и не юзать вонючий Laravel. Если ты думаешь что таким способом выиграешь в производительности, то ошибаешься, ты уже проиграл в производительности ещё до старта гонки.
Вообще для начала проверь правильная ли структура в $dns, а во вторых проверь привилегии пользователя в MySQL.



тут не в привилегиях дело, это соединение именно с базой сервера, для регистрации акк+статус сервера, если она не доступна сайт падает с данной ошибкой.



Тс - ты хочешь исправить продлему, или ее избежать? Это коннент к какой бд? Основной блок сайта или екстернал сервер?

Ну не скажи, уверен все проблемы в правильности использования.

Первый запрос в гугле, и увидел что можно связать лару и варниш без особых проблем, в итоге до 100 мс будет возвращаться страница.
Часто легче исаолиспольз уже готоаыг решения... Зависит от бюджета и хотелки



данную cms писал не я, и я не особо разбираюсь в этом) готов на платной основе на допил данного продукта.

Logan22
30.10.2018, 22:19
если она не доступна сайт падает с данной ошибкой


Ну так бы сразу описал. Ну конечно, а как иначе, будет разумеется падать, делай проверку (http://php.net/manual/ru/language.exceptions.php)!

Logan22
30.10.2018, 22:22
Как-то так должно быть, дальше делай под себя.

PHP:



public
function
createConnection
(
$dsn
,
array
$config
,
array
$options
)
{
$username
=
array_get
(
$config
,
'username'
)
;
$password
=
array_get
(
$config
,
'password'
)
;
try
{
return
new
PDO
(
$dsn
,
$username
,
$password
,
$options
)
;
}
catch
(
Throwable
$t
)
{
// Для пыха 7
echo
'Нет соденинения с БД...'
;
}
catch
(
Exception
$e
)
{
// Для пыха 5
echo
'Нет соденинения с БД...'
;
}
}

sQula
30.10.2018, 22:41
Как-то так должно быть, дальше делай под себя.

PHP:



public
function
createConnection
(
$dsn
,
array
$config
,
array
$options
)
{
$username
=
array_get
(
$config
,
'username'
)
;
$password
=
array_get
(
$config
,
'password'
)
;
try
{
return
new
PDO
(
$dsn
,
$username
,
$password
,
$options
)
;
}
catch
(
Throwable
$t
)
{
// Для пыха 7
echo
'Нет соденинения с БД...'
;
}
catch
(
Exception
$e
)
{
// Для пыха 5
echo
'Нет соденинения с БД...'
;
}
}




PHP:



public
function
createConnection
(
$dsn
,
array
$config
,
array
$options
)
{
$username
=
array_get
(
$config
,
'username'
)
;
$password
=
array_get
(
$config
,
'password'
)
;
try
{
return
new
PDO
(
$dsn
,
$username
,
$password
,
$options
)
;
}
catch
(
Exception
$e
)
{
echo
'Нет соденинения с БД...'
;
}
}


что-то не прокатило, ошибка таже

sQula
30.10.2018, 22:50
Хотя возможно кеш виноват.

p.s не, не он.

не прокатило

Desquire
30.10.2018, 23:10
Попробуй

catch( PDOException $е) {

sQula
30.10.2018, 23:22
Попробуй
catch( PDOException $е) {



PHP:



public
function
createConnection
(
$dsn
,
array
$config
,
array
$options
)
{
$username
=
array_get
(
$config
,
'username'
)
;
$password
=
array_get
(
$config
,
'password'
)
;
try
{
return
new
PDO
(
$dsn
,
$username
,
$password
,
$options
)
;
}
catch
(
PDOException $е
)
{
echo
'Нет соденинения с БД...'
;
}
}


и так не прокатило(

sQula
30.10.2018, 23:44
может вообще не тут копаю?

Desquire
31.10.2018, 00:08
Попробуй так.

PHP:



public
function
createConnection
(
$dsn
,
array
$config
,
array
$options
)
{
$username
=
array_get
(
$config
,
'username'
)
;
$password
=
array_get
(
$config
,
'password'
)
;
try
{
$pdo
=
new
PDO
(
$dsn
,
$username
,
$password
,
$options
)
;
return
$pdo
;
}
catch
(
PDOException $е
)
{
echo
'Нет соденинения с БД...'
;
die
(
)
;
// тут должно выкинуть.
}
}


Но даже если заведется, то это просто костылише.

Если хочешь могу рассказать как переделать.

Logan22
31.10.2018, 00:41
PHP:



$pdo
=
new
PDO
(
$dsn
,
$username
,
$password
,
$options
)
;
return
$pdo
;



А в чем фокус?)

Выделили память на переменную которую сразу же и возвращаем! xD

sQula
31.10.2018, 10:55
Попробуй так.

PHP:



public
function
createConnection
(
$dsn
,
array
$config
,
array
$options
)
{
$username
=
array_get
(
$config
,
'username'
)
;
$password
=
array_get
(
$config
,
'password'
)
;
try
{
$pdo
=
new
PDO
(
$dsn
,
$username
,
$password
,
$options
)
;
return
$pdo
;
}
catch
(
PDOException $е
)
{
echo
'Нет соденинения с БД...'
;
die
(
)
;
// тут должно выкинуть.
}
}


Но даже если заведется, то это просто костылише.
Если хочешь могу рассказать как переделать.


не прокатило

Desquire
31.10.2018, 16:45
А в чем фокус?)
Выделили память на переменную которую сразу же и возвращаем! xD


Магия пхп.

Дак а чё у него ексепшн не ловит?

Я хз.

+ 7+ пхп уже не такой тупой)

То что z выделил, и вернул, то пыха просто работает с ссылкой в памяти, и это только тут выглядит как костыль полный, под капотом чуть умнее работает)