Ошибки при подключении к бд

Автор aleksandr.v, 07 ноября 2007, 23:13:19

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

aleksandr.v

После манипуляций по переводу БД в win1251 и действий, описанных тут - http://www.simplemachines.ru/index.php/topic,1150.msg7122.html#msg7122
при опшибки соединения с бд пишется такая хрень:
Цитировать
Warning: mysql_query() [function.mysql-query]: Access denied for user 'swworld'@'localhost' (using password: NO) in /home/swworld/swworld.alfamoon.com/forum/index.php on line 66

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/swworld/swworld.alfamoon.com/forum/index.php on line 66

Warning: mysql_query() [function.mysql-query]: Access denied for user 'swworld'@'localhost' (using password: NO) in /home/swworld/swworld.alfamoon.com/forum/index.php on line 67

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/swworld/swworld.alfamoon.com/forum/index.php on line 67

Warning: mysql_query() [function.mysql-query]: Access denied for user 'swworld'@'localhost' (using password: NO) in /home/swworld/swworld.alfamoon.com/forum/index.php on line 68

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/swworld/swworld.alfamoon.com/forum/index.php on line 68

Warning: Cannot modify header information - headers already sent by (output started at /home/swworld/swworld.alfamoon.com/forum/index.php:66) in /home/swworld/swworld.alfamoon.com/forum/Sources/Subs-Auth.php on line 346

Warning: Cannot modify header information - headers already sent by (output started at /home/swworld/swworld.alfamoon.com/forum/index.php:66) in /home/swworld/swworld.alfamoon.com/forum/Sources/Subs-Auth.php on line 347

Warning: Cannot modify header information - headers already sent by (output started at /home/swworld/swworld.alfamoon.com/forum/index.php:66) in /home/swworld/swworld.alfamoon.com/forum/Sources/Subs-Auth.php on line 348
Как сделать, чтобы вываливалось аккуратное сообщение "обновите страницу, сейчас сервер перегружен", как раньше.

genix

самая первая ошибка у тебя это он грит ты пытаешься без пароля к базе приконнектиться. А это либо в settings.php его нет, либо в самом файле где это вызываешь недоопределил что-то или вызываешь эту mysql_connect не с теми параметрами
- Все, что не убьет меня, сделает меня сильнее - (Ф.Ницше, Карандаш, Кани Вест)

aleksandr.v

Цитата: genix от 07 ноября 2007, 23:32:55
самая первая ошибка у тебя это он грит ты пытаешься без пароля к базе приконнектиться. А это либо в settings.php его нет, либо в самом файле где это вызываешь недоопределил что-то или вызываешь эту mysql_connect не с теми параметрами
Так я файл settings.php вообще не трогал, а если бы там не было пароля, я бы вообще на форуме не мог зайти, имхо. Я только произвёл изменения, которые были указаны Mavn-ом по этой ссылке: http://www.simplemachines.ru/index.php/topic,1150.msg7122.html#msg7122

Т.е. вставил такую штуку:
// Connect to the MySQL database.
if (empty($db_persist)) {
     $db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
} else {
     $db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
}

Что делать, а то не красиво получается.

genix

Ты чисто ради эксперимента перед вот этим кодом вставь строчку из Settings.php такого плана:
$db_passwd = 'какой_у_тебя_там_пароль';

Увидишь, что у тебя как минимум на 7 ошибок станет меньше, а то и вовсе все ок будет. И там уже поглядишь че не так у тебя с обычной идентификацией этой переменной, ибо все равно это не дело вставлять эту переменную везде.
- Все, что не убьет меня, сделает меня сильнее - (Ф.Ницше, Карандаш, Кани Вест)

aleksandr.v

ИМХО дело в этой строке:
// Show an error if the connection couldn't be made.
if (!$db_connection || !@mysql_select_db($db_name, $db_connection))
db_fatal_error();

Как я понимаю, она возвращает ошибку при неудачном подсоединении к БД. Вот она и возвращает её неправильно. А то что выше отвечает вроде только за соединение при удачнов подключении. А у меня с ним всё нормально и так, не вылетает никаких ошибок. Вылетает только при неудачном. Я прав?

genix

Да, она возвращает ошибку при неудачном подключении. Да, давайте исправлять ошибки в коде тем, что не будем их показывать?
Если бы у тебя эта строчка выводила ошибку, то появилось бы не Warning, а именно fatal error, а какая именно строчка проблемная у тебя в ошибке написано:
...../forum/index.php on line 66

Прочитай внимательно текст ворнинга, который тебе выводится:
Access denied for user 'swworld'@'localhost' (using password: NO)
Перевожу: доступ запрещен для пользователя логин='swworld', адрес сервера='localhost', с паролем=''. Пароля у тебя не задано, как ты к базе подключишься без него?

Не трать свое время, попробуй сделать так, как я сказал в пред.посте и посмотри...
- Все, что не убьет меня, сделает меня сильнее - (Ф.Ницше, Карандаш, Кани Вест)

aleksandr.v

Цитата: genix от 08 ноября 2007, 10:06:32
Да, она возвращает ошибку при неудачном подключении. Да, давайте исправлять ошибки в коде тем, что не будем их показывать?
Если бы у тебя эта строчка выводила ошибку, то появилось бы не Warning, а именно fatal error, а какая именно строчка проблемная у тебя в ошибке написано:
...../forum/index.php on line 66

Прочитай внимательно текст ворнинга, который тебе выводится:
Access denied for user 'swworld'@'localhost' (using password: NO)
Перевожу: доступ запрещен для пользователя логин='swworld', адрес сервера='localhost', с паролем=''. Пароля у тебя не задано, как ты к базе подключишься без него?

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

genix

Вот про это я и говорю, что посмотреть тебе надо почему у тебя этой переменной нет, хотя должна быть. Это уж ты сам разберись что не так, тебе видней что ты там мудрил.
А вот про код ошибки я не совсем понял... что значит вызывать код ошибки и почему именно после того, как сервак ляжет?
- Все, что не убьет меня, сделает меня сильнее - (Ф.Ницше, Карандаш, Кани Вест)

aleksandr.v

genix, в файле index.php не должно быть этой переменной, не должно быть пасса от базы. Я вообще со скриптами обхожусь ОЧЕНЬ аккуратно, так что уверен, что у меня всё правильно. Пароль должен быть в файле настроек, вроде settings.php, и он там ЕСТЬ. Но я его, как ты посоветовал, ещё и вставил в файл index.php :)

ЦитироватьА вот про код ошибки я не совсем понял... что значит вызывать код ошибки и почему именно после того, как сервак ляжет?
Так ведь и это и есть суть темы. Так у меня подключается всё нормально, никаких проблем нет. Никаких ошибок не вываливается. Но когда не получается подключиться к базе данных (т.е. вся база на хостере зависла) и вываливаются этот град ошибок. Хотя должно просо писаться, что мол невозможно подсоединиться к базе. И произошло это именно после того, как я вставил вышеприведённый код, я уверен.

genix

К базе может не быть доступа либо по причине ошибок в коде, либо по причине того, что сервер не работает как надо. Так вот, я не знаю какое у тебя там выводится сообщение, когда сервер не пашет, но когда вот такие как ты вставил, то это только из-за кривого кода.
Лично у меня случаев, что база на сервере не отвечает, было очень мало... Видимо, с хостером повезло... =)

А насчет того, что в index.php этой строчки по умолчанию быть не должно, разбирайся сам, если есть желание. ИМХО работает и фиг бы с ним, если нет желания разбираться в проблеме самому. Другим тем более не хочется разбираться в твоих проблемах.Безопасности это не вредит - ибо если какой-нить мегакулхацкер получит доступ к твоему index.php, то следующим его шагом будет доступ к Settings.php, а там и каюк. =) Так что не переживай ;)
- Все, что не убьет меня, сделает меня сильнее - (Ф.Ницше, Карандаш, Кани Вест)

aleksandr.v

Ну спасибо, успокоил... Надеюсь с новым хостером сайт будет нормально подключаться и эта страница корявая не будет позорить мой сайт.

aleksandr.v

genix, последний вопрос. А в этом может быть виноват исключительно хостер? В этих ошибках? Я провёл эксперимент: в админке сказал форуму подключаться к НЕСУЩЕСТВУЮЩЕЙ базе. Т.е. эффект должен быть тотже, когда база у хостера зависает. И, что бы вы подумали? Никаких ошибок, простая фраза, что сейчас подключиться нельзя.

genix

Я же говорил, что В ЭТИХ ошибках вина только кривого кода, а никак не хостера. Перечитай вот этот кусок моего прошлого сообщения:

Цитировать
К базе может не быть доступа либо по причине ошибок в коде, либо по причине того, что сервер не работает как надо. Так вот, я не знаю какое у тебя там выводится сообщение, когда сервер не пашет, но когда вот такие как ты вставил, то это только из-за кривого кода.
- Все, что не убьет меня, сделает меня сильнее - (Ф.Ницше, Карандаш, Кани Вест)

aleksandr.v

#13
Цитата: genix от 09 ноября 2007, 06:47:13
Я же говорил, что В ЭТИХ ошибках вина только кривого кода, а никак не хостера. Перечитай вот этот кусок моего прошлого сообщения:

Тьфу. Забыл добавить, что в конце ошибок таки вываливается знакомое: "Connection Problems
Sorry, SMF was unable to connect to the database. This may be caused by the server being busy. Please try again later."
Соответственно и после добавления переменной в index.php ситуация не поменялась :D

Mavn

Посмотри внимательно какие  у тебя настройки php в частности отображение ошибок как прописаны в php.ini
Может быть именно поэтому у тебя на одном хосте отображается ошибка а на другом нет.
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.

aleksandr.v

Цитата: Mavn от 10 ноября 2007, 12:14:30
Посмотри внимательно какие  у тебя настройки php в частности отображение ошибок как прописаны в php.ini
Может быть именно поэтому у тебя на одном хосте отображается ошибка а на другом нет.
Ну это пока на моём старом, не на новом. На старом у меня нету доступа к php.ini. Но спасибо за отклики, я сейчас перееду на РБК, а там, надеюсь вы не будуте против если я подниму тему заново.