12:33

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
[ok]

Не получается соединиться с БД через PDO. Через эксепшн выводит ошибку: "SQLSTATE[28000] [1045] Access denied for user 'xxxxxx'@'xxx.xxx.xxx.xxx' (using password: YES)".
Через стандартное mysql_connect() все нормально.
Хостинг - masterhost.ru
PDO поставлен и мускульный драйвер запущен.

Сменить хостинг не вариант.


UPD:

Не работает:
$dsn = 'mysql:dbname=имябд;host=имяхоста';
$user = 'логин';
$password = 'пароль';
$dbh = new PDO($dsn,$user,$password);

Работает: $dbh = new PDO('mysql:dbname=имябд;host=имяхоста','логин', 'пароль');

@темы: Сети и серверы

Комментарии
05.03.2010 в 12:36

'xxxxxx'@'xxx.xxx.xxx.xxx'

интуитивно мне кажется, что хост "xxx.xxx.xxx.xxx" в случае с mysql_connect() указывается другой
05.03.2010 в 12:38

я правильно понимаю, оба варианта вызываются в PHP с одного и того же хоста, при этом один работает, а другой нет? можешь показать сам кусок кода, точнее, две — который работает и который не работает?
что-то вроде $db = new PDO("mysql:host=$host;dbname=$database", $username, $password);
05.03.2010 в 12:45

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
интуитивно мне кажется, что хост "xxx.xxx.xxx.xxx" в случае с mysql_connect() указывается другой
Все данные одинаковы.

Сейчас всё работает через стандартный mysql_connect. Я хочу вывести через PDO оболочку, но столкнулся с проблемой выше.

Не понимаю, зачем примеры кода, но вот:

Не работает: $dbh = new PDO('mysql:dbname=имябд;host=имяхоста','логин', 'пароль');

Работает: $db = mysql_connect('имяхоста','логин','пароль');
05.03.2010 в 13:01

хехехе. скорее всего mysql_connect у вас цепляется к базе не по tcp-сокету, а по unix-сокету. позырьте что вам напишет mysql_info ($db).
05.03.2010 в 13:04

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
Какой-то бред в общем.

Уточню предыдущий пост:

Не работает:
$dsn = 'mysql:dbname=имябд;host=имяхоста';
$user = 'логин';
$password = 'пароль';
$dbh = new PDO($dsn,$user,$password);

Работает: $dbh = new PDO('mysql:dbname=имябд;host=имяхоста','логин', 'пароль');

Раньше на всех хостингах работал 1ый вариант. В чём может быть особенность мастерхоста?
05.03.2010 в 13:07

проверьте всё внимательно, дело то явно не в синтаксисе.
05.03.2010 в 13:31

мой опыт показывает, что часто причиной подобной проблемы становится опечатка

-Inori-, попробуй воспроизвести проблему
05.03.2010 в 13:50

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
Проблема и не ушла, просто она стала незначительной.

Опечатки быть не может, разве что в ctrl+c/v внедрили такую функцию.
05.03.2010 в 13:51

не может быть или нет? вам сложно что ли взять и проверить ещё раз?
05.03.2010 в 13:52

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
ок, перефразирую: еще до того как сюда написать я убил час на то чтобы убедиться, что нет ни единой опечатки. Их нет. Вообще. Нихт.
Так лучше?
05.03.2010 в 14:19

ты хочешь разобраться с проблемой? у тебя получилось её воспроизвести?
05.03.2010 в 14:21

позырьте что вам напишет mysql_info ($db)
05.03.2010 в 14:48

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
mysql_get_host_info возвращает "имяхоста via TCP/IP"

Короче, проблемы в общем-то и нет - к PDO я подключился так или иначе, хоть и не так как хотелось бы/привык.
05.03.2010 в 15:05

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
Проблема заключалась в последовательном вызове файла с дб конфигами и файла с дб классом из разных мест для дальнейшего соединения. Видимо в таком случае его сглючивает или хз.

В общем решение - либо держать конфиг и класс в одной папке, либо вообще конфиг внутри файла класса.
05.03.2010 в 15:13

код можете показать?
05.03.2010 в 15:17

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
текущий или который давал сбой?
Если второе, то стёрто, а переписывать как-то нет желания
было что-то вроде:
require_once '../lib/init.php';

init.php:

require_once '../dbconf.php';
require_once 'classes/db.php';

в дб код выше с использованием переменных из dbconf


Еще теперь уже точно не помню, но возможно в db.php был еще один вызов dbconf для подстраховки, мб он вызывал проблему.
05.03.2010 в 15:18

жаль
05.03.2010 в 15:44

All that we see or seem, is but a dream within a dream.. (c) E. A. Poe
вытащил из хистори.
Проблема была в опечатке в названии переменной. Час убил на перепроверку всех возможных данных соединения с бд, не замечая '$passwrd' вместо '$password'...
05.03.2010 в 15:53

error_reporting = E_ALL | E_STRICT же