[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySQL соединение
DiamondeX
Здрасьте, уважаемые Профи. Нужна ваша подсказка.

Я учу PHP+MySQL. Воспользовался бесплатным хостингом www.awardspace.com. Создал там свой субдомен narrowaymyst.awardspace.info и базу narrowaymyst_01
С помощью phpMyAdmin создал таблицу Logs.
Затем создал файлик LogsWork.php примерно такого содержания:
<?php 
error_reporting( E_ALL & E_STRICT );

// Константы (пока все вместе)
$c_hostname = "82.197.131.27";
$c_username = "narrowaymyst_01";
$c_password = "*******";
$c_dbName = "narrowaymyst_01";

/* создать соединение */
mysql_connect($с_hostname,$с_username,$с_password) or die("<span id=result>Ошибка</span>! Не удалось создать соединение: " . mysql_error());
echo "Соединение установлено.";
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($с_dbName) or die("<span id=result>Ошибка</span>! Не удалось выбрать БД: " . mysql_error());
echo "База данных выбрана.";

if ($_POST['command'] = 'addLog') {
/* составить запрос для вставки информации в таблицу */
$time = strPOST('time');
$type = strPOST('type','s'); //s(simple) - простое сообщение
//e(error) - сообщение об ошибке
//b(begin) - начальное сообщение уровня
//f(finish) - конечное сообщение уровня

$level = intPOST('level');
$msg = strPOST('msg');
$sql = "INSERT INTO `Logs` (`time`, `type`, `level`, `msg`, `id`) "
."VALUES ('$time', '$type', '$level', '$msg', '')";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
mysql_query($sql) or die("<span id=result>Ошибка</span> при выполнении запроса: " . mysql_error());
echo "<span id=result>OK</span>. Лог добавлен.";
} else {
echo "<span id=result>Нет</span> команд на выполнение.";
}

?>

В результате посещения страницы http://narrowaymyst.awardspace.info/LogsWork.php в любом браузере получаю такое сообщение:
Ошибка! Не удалось создать соединение: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Подскажите где искать проблему, и как ее исправить?



Спустя 6 минут, 19 секунд (26.07.2010 - 00:58) Ice написал(а):
Цитата (DiamondeX @ 26.07.2010 - 01:52)
server through socket

Сокет предполагает не только айпишник, но и порт, через который он устанавливается. Я не думаю что сервер БД находится на 80 порту.
Цитата (PHP Manual @ 26.07.2010 - 01:58)

Замечание: При указании параметру server значения "localhost" или "localhost:port" клиентская библиотека MySQL будет пытаться соединиться с локальным сокетом. Если вы всё же хотите использовать TCP/IP, используйте адрес "127.0.0.1" вместо "localhost". Если клиентская библиотека пытается подключиться не к тому локальному сокету, это можно исправить через указание директивы mysql.default_host в конфигурации PHP, после чего можно оставлять параметр server пустым.
Поддержка указания порта через ":port" была добавлена в PHP 3.0B4.
Поддержка указания локального сокета как ":/path/to/socket" была добавлена в PHP 3.0.10.
Подавить вывод ошибок можно добавив @ в начало названия функции (@mysql_connect())


Спустя 5 минут, 23 секунды (26.07.2010 - 01:03) DiamondeX написал(а):
Наверно вы правы. А как узнать этот самый порт?

Спустя 1 минута, 2 секунды (26.07.2010 - 01:04) Ice написал(а):
Связаться с техподдержкой, наверное, или в настройках глянуть. Не юзал, не в курсе, к сожалению.

Спустя 12 минут, 9 секунд (26.07.2010 - 01:17) DiamondeX написал(а):
Я посмотрел в их phpInfo: по-умолчанию используется порт 3306 (видимо как обычно).
mysql.default_port | 3306 | 3306

Там же прописан и этот "сокет":
mysql.default_socket | /var/run/mysqld/mysqld.sock | /var/run/mysqld/mysqld.sock

Не знаете, что значит этот сокет, и как он вообще используется/настраивается? Что можно почитать на эту тему (если уж на то пошло)?

Спустя 5 минут, 22 секунды (26.07.2010 - 01:22) Ice написал(а):
Сокет, слово не страшное. Другими словами, сокет - это соединение, установленное между машинами. Всё, что нужно для его настройки - это IP и порт.
Моя настольная книга - мануал, и, собственно, что там говорится по этому поводу:
Цитата

mysql_connect
(PHP 4, PHP 5)

mysql_connect — Открывает соединение с сервером MySQL

Описание
resource mysql_connect ([ string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]] )
Возвращает указатель на соединение с MySQL в случае успешного выполнения, или FALSE при неудаче.

mysql_connect() устанавливает соединение с сервером MySQL. Следующие значения по умолчанию установлены для отсутствующих параметров: server = 'localhost:3306', username = имя пользователя владельца процесса сервера и password = пустой пароль.

Параметр server может также включать номер порта, к примеру "hostname:port" или путь к сокету, к примеру ":/path/to/socket" для локального сервера.

Замечание: При указании параметру server значения "localhost" или "localhost:port" клиентская библиотека MySQL будет пытаться соединиться с локальным сокетом. Если вы всё же хотите использовать TCP/IP, используйте адрес "127.0.0.1" вместо "localhost". Если клиентская библиотека пытается подключиться не к тому локальному сокету, это можно исправить через указание директивы mysql.default_host в конфигурации PHP, после чего можно оставлять параметр server пустым.
Поддержка указания порта через ":port" была добавлена в PHP 3.0B4.
Поддержка указания локального сокета как ":/path/to/socket" была добавлена в PHP 3.0.10.
Подавить вывод ошибок можно добавив @ в начало названия функции (@mysql_connect())



Если второй вызов функции произошёл с теми же аргументами mysql_connect(), новое соединение не будет установлено. Вместо этого функция вернёт ссылку на уже установленное соединение. Параметр new_link может заставить функцию mysql_connect() открыть ещё одно соединение, даже если соединение с аналогичными параметрами уже открыто. Параметр client_flags должен быть комбинацией из следующих констант: MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE, MYSQL_CLIENT_INTERACTIVE.

Замечание: Параметр new_link добавлен в PHP 4.2.0
Параметр client_flags добавлен PHP 4.3.0


Соединение с сервером будет закрыто при завершении исполнения скрипта, если до этого оно не будет закрыто с помощью функции mysql_close().



Спустя 10 минут, 28 секунд (26.07.2010 - 01:32) Guest написал(а):
Цитата (Ice @ 25.07.2010 - 22:22)
Параметр server может также включать номер порта, к примеру "hostname:port" или путь к сокету, к примеру ":/path/to/socket" для локального сервера.

... Если клиентская библиотека пытается подключиться не к тому локальному сокету, это можно исправить через указание директивы mysql.default_host в конфигурации PHP, после чего можно оставлять параметр server пустым.
...
Поддержка указания локального сокета как ":/path/to/socket" была добавлена в PHP 3.0.10.

Ну, через указание директивы mysql.default_host в конфигурации PHP у меня не получится исправить положение - это запрещено правилами хостинга. Вопрос теперь, как узнать мой сокет? или как предотвратить использование сокета по умолчанию, который, видимо, не ведет к нужному серверу бд? можно ли как-то указать пустой сокет, вроде ":/"?

Спустя 1 минута, 27 секунд (26.07.2010 - 01:34) DiamondeX написал(а):
На всяк случай: предыдущий пост от Guest - мой smile.gif

Спустя 4 минуты, 57 секунд (26.07.2010 - 01:39) Ice написал(а):
Цитата (Guest @ 26.07.2010 - 02:32)
можно ли как-то указать пустой сокет, вроде ":/"

Две составляющие сокета? (неужели зря все говорил)

Можно вообще не указывать порт, но тогда он будет выставлен по умолчанию - 3306 (а не 80 - я ошибся, конечно же 3306).
Наверняка, порт можно узнать у техподдержки хостинга, иначе что ж за хостинг такой, у которого техподдержки нет.

Спустя 23 минуты, 45 секунд (26.07.2010 - 02:03) DiamondeX написал(а):
Нет, говорил не зря. Просто было не понятно, почему он пытается где-то там найти сокет, когда он задан явно?
Как оказалось (та самая техподдержка среагировала), необходимо в качестве параметров указывать именно строковые константы, а не переменные, содержащие эти константы. То есть вместо
$c_hostname = "82.197.131.27";
$c_username = "narrowaymyst_01";
$c_password = "*******";

/* создать соединение */
mysql_connect($с_hostname,$с_username,$с_password) or die("<span id=result>Ошибка</span>! Не удалось создать соединение: " . mysql_error());

просто писать
/* создать соединение */
mysql_connect("82.197.131.27","narrowaymyst_01","*******") or die("<span id=result>Ошибка</span>! Не удалось создать соединение: " . mysql_error());


Сейчас пытаюсь уточнить в чем причина таких правил...

Спустя 15 минут, 10 секунд (26.07.2010 - 02:18) Guest написал(а):
Снова оч. быстро ответили:
Цитата
It could be just because your variables contain the symbol _ or something like that, anyway there is no strict rule that you have to put your database connection details in the mysql_connect() function in order to work.

или по-русски
Цитата
Это могло произойти просто из-за использования символа _ в переменных или чего-то подобного, в любом случае, нет строгого правила помещать детали соединения с базой данных в вызов функции mysql_connect(), чтобы обеспечить работоспособность.

Спустя 1 минута, 10 секунд (26.07.2010 - 02:19) DiamondeX написал(а):
Опять забыл ник свой указать в предыдущем посте smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.