Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069

mysql_connect() -> mysql_error( линк? )

11.08.2011, 12:20. Показов 3141. Ответов 9

Студворк — интернет-сервис помощи студентам
Функция mysql_error() принимает необязательный агрумент - линк соединения. Когда мы работаем только с одним соединением, он нам не нужен, и мы о нем даже не задумываемся.
PHP
1
2
mysql_connect(...) or die(mysql_error());
mysql_query('...') or die(mysql_error());
В случае ошибки соединения mysql_error() выдаст нам нормальное сообщение об ошибке (проблемы со связью, с сервером, с логином/паролем). Здесь всё хорошо.

Если нам вздумается работать с несколькими соединениями, то результат mysql_connect() нам надо будет везде передавать в другие функции. Тут тоже всё хорошо, кроме одного места: самого коннекта. Если mysql_connect() не удалось законнектиться, то никакого линка у нас нет. Следовательно в mysql_error() в случае ошибки соединения мы по-прежнему ничего не передаем, потому что просто нечего туда передать:
PHP
1
2
$link = mysql_connect(...) or die(mysql_error()); // нет линка
mysql_query('...', $link) or die(mysql_error($link)); // есть линк
Но такой вариант тоже не совсем правильный. Последовательность действий:
  1. Устанавливаем соединение №1.
  2. Пробуем выполнить неправильный запрос в соединении №1 - получаем ошибку.
  3. Пробуем установить соединение №2 с неправильными логином/паролем, чтобы соединение заведомо не прошло.
Если после этого вызывать mysql_error() без линка (потому что линка нет), то, как и сказано в документации, будет использован последний линк из установленных, т.е. линк №1. Т.е. вместо желанного сообщения о неправильном логине/пароле мы получим сообщение об ошибке из соединения №1 о неправильном запросе из пункта 2.

Получается замкнутый круг: невозможно узнать причину ошибки второго и последующих соединений, если уже существуют установленные ранее соединения.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2011, 12:20
Ответы с готовыми решениями:

Не работает mysql_error() или . ?
Приветствую! Собрал что то типо отладочной болванки для работы с запросами однако вот эта функция mysql_error() почему то не показывает...

В шапке сайта ошибка: 194 Warning: mysql_error
Здравствуйте. Поставил на хостинг сайт. Сверху вылазит ошибка, такого вида: Отыскал файл Mysql.php, строку 194: return...

Mysql_error(): supplied argument is not a valid MySQL-Link resource
if(!empty($_POST)) { mysqli_query($link,"INSERT INTO Vac (Word,Sound,Translate,Property,FirstTime,Repeat) VALUES...

9
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
11.08.2011, 16:36
не задумывался над этим
первое что приходит в голову использование try. Сам в php ни разу не пользовался им, пытаюсь подойти логически

Добавлено через 3 минуты
немного подумав, добавлю. Зачем для нескольких соединений использовать линк первого соединения?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
11.08.2011, 17:59  [ТС]
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
первое что приходит в голову использование try
Там исключения никто не бросает.

Цитата Сообщение от Love_and_Peace Посмотреть сообщение
Зачем для нескольких соединений использовать линк первого соединения?
В том и дело, что это не мы - это оно само. Мы бы ему с радостью сообщили, что мы на самом деле имели ввиду попытку второго соединения, но второй линк не был установлен - передать нечего. А когда ничего не передано - оно само использует последний из существующих - первый.

Добавлено через 5 минут
В рамках модуля mysql эта проблема, скорее всего, не решается. Остаётся использовать другой драйвер (MySQLi или PDO например). Эта тема даже вопросом не является. Это просто постановка перед фактом.
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
12.08.2011, 12:38
Цитата Сообщение от Vovan-VE Посмотреть сообщение
постановка перед фактом.
возможно, в дебри MySQL не лез.
а это не понятно
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Там исключения никто не бросает.
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
12.08.2011, 13:17
Vovan-VE, а может, отказаться просто от подробностей? Ну не удалось подключиться и не удалось. Много будешь знать - скоро состаришься
Или можно mysqli использовать... там такой проблемы нет.

Добавлено через 1 минуту
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
а это не понятно
Когда происходит ошибка, связанная с mysql, то try её не заметит.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
12.08.2011, 14:22  [ТС]
Цитата Сообщение от Humanoid Посмотреть сообщение
Ну не удалось подключиться и не удалось. Много будешь знать - скоро состаришься
Да мне эти два подключения одноременно нафиг не нужны. С одним-то все хорошо. Просто ради спортивного интереса велосипед изобретал, и обнаружил такую особенность. Если вдруг на самом деле потребуется несколько соединений, то я уже буду в курсе, что надо использовать mysqli.
0
zxcasdqwe
31.10.2012, 14:04
заюзай set_error_handler
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
31.10.2012, 15:16  [ТС]
Цитата Сообщение от zxcasdqwe Посмотреть сообщение
заюзай set_error_handler
Среди всех возможных ошибок, которые могут возникнуть, искать одну единственную непонятно по какому критерию (кроме как по тексту сообщения, больше не по чему) - не самое лучшее занятие. Помимо этого еще через какой велосипед (который даже пытаться представить не хочется) я должен передать найденный текст ошибки наружу из error handler'а в тот участок кода, откуда был сгенерирован Warning? Бр-р, жуть
0
zxcasdqwe
31.10.2012, 17:11
выше ведь хотели использовать try catch. твоя трабла была в том, что mysql_* эксепшены не кидают. дак, брось его сам
обработка ошибок mysql_* функций - strpos(errstr,"mysql_") как минимум
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
31.10.2012, 18:57  [ТС]
Цитата Сообщение от zxcasdqwe Посмотреть сообщение
обработка ошибок mysql_* функций - strpos(errstr,"mysql_")
Не, я бы в жизнь такими вещами на занимался.

Вопрос в сабже был задан год назад и был скорее риторическим. Давно надо использовать MySQLi и PDO.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2012, 18:57
Помогаю со студенческими работами здесь

mysql_connect
в htaccess прописал php_value mysql.default_host localhost php_value mysql.default_user name php_value mysql.default_password...

Mysql_connect
устарела ли запись mysql ? : mysql_connect() or die ();

mysql_connect
Здравствуйте, программисты! У меня такой вопрос: В каких случаях нужно указывать сервер, отличный от localhost при вызове функции...

mysql_connect
ребят, несколько вопросов по поводу кода соединения с базой данных : 1) этот код нужно прописывать в отдельном файле? например...

Mysql_connect
Что за ошибка??


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru