Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Заблокирован

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

27.09.2024, 19:24. Показов 790. Ответов 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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
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
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,818
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
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
29.09.2024, 14:24
Цитата Сообщение от Dmit199 Посмотреть сообщение
Трудность в том, что пользователь будет видеть на странице ошибки...
Поэтому display_errors включается только во время локальной разработки и отключается на конечном сайте.

Цитата Сообщение от Dmit199 Посмотреть сообщение
Каким образом возможно определить что в процессе выполнения произошла ошибка и отдать свою html страницу?
PHP
1
2
3
4
5
try {
    // тут код вашего приложения
} catch (\Throwable $e) {
    // тут сохраняем ошибку в логи и отображаем html страницу с ошибкой
}
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,818
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
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru