Заблокирован

500 код ответа, при подключении к бд

27.09.2024, 19:24. Показов 874. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
PHP
1
2
3
4
5
     (new PDO('mysql:host=localhost;dbname=table', 'user', '123', [
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'", 
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION]))
        OR die('No connect');
При попытке подключиться к несуществующей базе данных. Браузер отображает ошибку, страница с кодом 500...

Быть может что в настройках мусил неверно выставлено? Пытаюсь отобразить сообщение на странице 'No connect', не выходит, сервер будто бы целиком падает. Как исправить?

Тоже самое, ели делать запрос к несуществующей таблице и вместо того, чтобы отобразить ошибку на странице, отдает дефолтную страницу браузера с кодом 500

Добавлено через 5 минут
PHP
1
2
3
4
5
6
7
8
9
try {
 
 
} catch (\Throwable $th) {
 
    die('sdf');
 
 
}
Не хотелось бы код обертывать, хотя...

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class bb
{
 
    public $db_id;
    public $query_id;
 
    function __construct() {
 
try {
    new PDO('mysql:host=localhost;dbname=table', 'user', '123', [
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'", 
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION])ж
} catch (\Throwable $th) {
    die('sdf');
}
    }
 
    function query($sql, $value = [])
    {
    }
 
    function super_query($sql, $value = [])
    {
    }
 
    function fetch() 
    {       
    }
 
    function fetchAll()
    {   
    }
 
    function fetchColumn()
    {   
    }
 
    function exec($sql)
    {   
    }
 
    function display_error($error, $sql= '')
    {
        die('-----------');
    }
 
}
 
$pdo = new bb;

Обернуть целиком одно дело, как узнать на момент ошибки. В какой из функции произошла ошибка, каков был запрос... Изначально рассчитывал, на случай ошибки запроса, буду вызывать функцию display_error.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2024, 19:24
Ответы с готовыми решениями:

idHTTP как получить текст ответа, при response code: 500 Error
Добрый день, Работаю с одним сервисом, который, если с ним что-то не в порядке, возвращает с кодом 500 xml в котором пишет причину...

Ошибка при подключении на сервер 500; VPS; DEBIAN 9
Здравствуйте форумчане, мне нужна помощь сисадмина. Установил на VDS php 7.2, mysql, apache, но при заходе на сайт пишет: Страница...

Ошибка 500 Internal Server Error при подключении группового доступа к каталогу
У меня есть каталог secret к которому, по идее, должны иметь доступ только пользователи из группы admins (данная группа прописана в файле...

7
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
27.09.2024, 19:41
Цитата Сообщение от Dmit199 Посмотреть сообщение
Не хотелось бы код обертывать
Почему? Нормальный вариант. Вместо Throwable можно указать PDOException.

Цитата Сообщение от Dmit199 Посмотреть сообщение
В какой из функции произошла ошибка
Для чего? Если для дебага - сохраняем трейс исключения в логи, там увидим, в каком месте произошла ошибка.

Если у каждого метода должно быть своё сообщение с ошибкой - можно для каждого сделать своё исключение.

PHP
1
2
3
4
5
catch (QueryException $e) {
    die('ошибка 1');
} catch (FetchException $e) {
    die('Ошибка 2');
}
Цитата Сообщение от Dmit199 Посмотреть сообщение
каков был запрос...
Можно сделать своё кастомное исключение, в которое можно передать доп данные, которые потом сохраняются в логи.

Добавлено через 1 минуту
Цитата Сообщение от Dmit199 Посмотреть сообщение
Изначально рассчитывал, на случай ошибки запроса, буду вызывать функцию display_error.
Только запроса? Или вообще при любой ошибке?
1
Заблокирован
27.09.2024, 20:39  [ТС]
В целом при любой ошибкe связанной с pdo...

Где можно почитать про варианты QueryException/FetchException/PDOException?

Или это просто, наименование функции + Exception ?
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
28.09.2024, 05:01
Цитата Сообщение от Dmit199 Посмотреть сообщение
QueryException/FetchException/PDOException?
PDOException выбрасывается сам при ошибочных запросах. Где почитать:
https://www.php.net/manual/ru/... ndling.php
https://www.php.net/manual/ru/... eption.php

Под QueryException и FetchException я имел ввиду свои кастомные исключения.

PHP
1
2
3
class MyException extends \Exception {}
 
throw new \MyException('Ошибка');
Цитата Сообщение от Dmit199 Посмотреть сообщение
В целом при любой ошибкe связанной с pdo...
А есть ли смысл разделять ошибки PDO и другие ошибки, синтаксические и т.п.?

А так самое простое - обернуть приложение в try-catch и отлавливать все PDOException.

PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
try {
    $db = new bb(); // Ваш класс
    $db->query(...);
    $db->super_query(...);
    $db->fetchAll(...);
    // ...
} catch (\PDOException $e) {
    // Как-то логируем содержимое $e
    // Показываем ошибку юзеру
}
Но не думаю, что из PDOException получится вытащить полный sql-запрос. Поэтому наверное лучше создать своё исключение, которое может принимать доп параметры:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class AppException extends \Exception
{
    private array $additional_data = [];
 
    public function __construct(string $message = "", int $code = 0, ?Throwable $previous = null, array $additional_data = []) {
        parent::__construct($message, $code, $previous);
        $this->$additional_data = $additional_data;
    }
 
    public function getAdditionalData(): array
    {
        return $this->additional_data;
    }
}
Далее в каждом методе (query, super_query, fetchAll и т.д.) перехватываем стандартное исключение PDOException и выбрасываем своё, добавляя туда какие угодно данные:

PHP
1
2
3
4
5
6
7
8
9
try {
    $query = '...';
    $pdo->query($query);
} catch (\PDOException $e) {
    throw new AppException($e->getMessage(), $e->getCode(), $e->getPrevious(), [
        'query' => $query,
        'params' => $params, // Если в SQL подставляются параметры, можно и их сохранить для логирования
    ]);
}
А где-то в самом начале приложения отлавливаем этот AppException и сохраняем в логи как саму ошибку, так и доп данные.
1
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
28.09.2024, 23:13
Цитата Сообщение от Dmit199 Посмотреть сообщение
Браузер отображает ошибку, страница с кодом 500...
Включите вывод ошибок...
http://karashchuk.com/PHP/erro... up_errors/
1
Заблокирован
29.09.2024, 14:03  [ТС]
PHP
1
ini_set('display_errors', 1);
Работает, ошибки отображаются.

PHP
1
2
3
4
5
        ($this->db_id = new PDO('mysql:host=localhost;dbname=bd', 'user', 'pass', [
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'", 
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION]))
        OR $this->display_error('No connect');
Трудность в том, что пользователь будет видеть на странице ошибки...

Каким образом возможно определить что в процессе выполнения произошла ошибка и отдать свою html страницу?

Добавлено через 4 минуты
PHP
1
2
if($_GET['do'] == 500)
   die('sdf');
htaccess
Code
1
ErrorDocument 500 /?do=500
Не работает, с включенными ошибками 200 код, выключенными 500. И в первом и во втором случаи, не работает...
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
29.09.2024, 14:24
Цитата Сообщение от Dmit199 Посмотреть сообщение
Трудность в том, что пользователь будет видеть на странице ошибки...
Поэтому display_errors включается только во время локальной разработки и отключается на конечном сайте.

Цитата Сообщение от Dmit199 Посмотреть сообщение
Каким образом возможно определить что в процессе выполнения произошла ошибка и отдать свою html страницу?
PHP
1
2
3
4
5
try {
    // тут код вашего приложения
} catch (\Throwable $e) {
    // тут сохраняем ошибку в логи и отображаем html страницу с ошибкой
}
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
29.09.2024, 19:32
Цитата Сообщение от Dmit199 Посмотреть сообщение
Каким образом возможно определить что в процессе выполнения произошла ошибка и отдать свою html страницу?
https://www.php.net/manual/ru/... andler.php
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2024, 19:32
Помогаю со студенческими работами здесь

HDD Seagate Barracuda 500 Gbytes SATA не виден при подключении к USB через переходник к нетбуку
Имеется:Seagate Barracuda 500 Gbytes HDD (SATA) Переходник : Raptor 2.5 main board v2r1 Нетбук HP mini 110-3100er Проблема : При...

EP-4PCA3 POST код C3 при подключении винта
При подключении винта вылазиет вот такая шляпа:) Винт пытаеться раскрутиться, дёргает дёргает но не получается, иной раз шевелю шлейфы и...

Как получить и вывести код ответа сервера при запросах по протоколу HTTP?
Всем привет! Cкажите, плиз, как получить и вывести код ответа сервера при запросах по протоколу HTTP на языке программирования HTML,...

Сделать так чтобы при подключении нулевого порта выполнялся один цикл кода а при подключении другого - другой
Как сделать так чтобы при подключении нулевого порта выполнялся один цикл кода, а при подключении другого другой. И вообще возможно ли это...

Нет ответа от WSDL SOAP.? Ошибка 500 Error я в этом новичек
Нет ответа от WSDL SOAP.? Ошибка 500 Error, я в этом новичок $wsdl_url='api.vtt.ru:8048/Portal.svc?singleWsdl'; //ссылка для обращения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru