Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Работа с N БД


Автор: MoLeX 11.12.2009, 14:55
Данный скрипт:
Код

// Соединения с СУБД  
   $bd['city']       = mysql_connect('127.0.0.1', 'root', '111') or die('Сервер MySQL недоступен.');
   $bd['house']      = mysql_connect('127.0.0.1', 'root', '111') or die('Сервер MySQL недоступен.');
   $bd['recourse']   = mysql_connect('127.0.0.1', 'root', '111') or die('Сервер MySQL недоступен.');
   
   
// Выбор таблиц
   mysql_select_db('table1',      $bd['city']) or die('Таблица #1 не найдена.');
   mysql_select_db('table2',     $bd['house']) or die('Таблица #2 не найдена.');
   mysql_select_db('table3',  $bd['recourse']) or die('Таблица #3 не найдена.');

   echo mysql_num_rows(mysql_query("SELECT * FROM `fam` WHERE `fam` = 'Петров' ", $bd['city']));



Возвращает:
Цитата

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in


хотя соединения со всеми таблицами установлено.


var_dump($bd); показывает:
Цитата

array(3) {
  ["city"]=>
  resource(3) of type (mysql link)
  ["house"]=>
  resource(3) of type (mysql link)
  ["recourse"]=>
  resource(3) of type (mysql link)
}

Автор: Ипатьев 11.12.2009, 15:12
Может быть, нету поля fam в таблице fam...

Добавлено через 3 минуты и 27 секунд
это был намек на использование mysql_error()
поскольку сама по себе ошибка аргумента не говорит об ошибке ничего. 

Если же говорить о вопросе в целом, то рекомендую комментарии из документации.

Автор: bars80080 11.12.2009, 15:34
зачем пихать всё в одну строку? неужели так лучше?

почему бы не писать всегда:

$sql = 'запрос';
$r = mysql_*;

и если не выходит, то просто после каждого mysql_* ставим: echo $sql; var_dump($r); и сразу всё видно

Автор: MoLeX 11.12.2009, 15:37
Цитата(Ипатьев @  11.12.2009,  15:12 Найти цитируемый пост)
Может быть, нету поля fam в таблице fam...

есть оно.

Автор: skyboy 11.12.2009, 15:42
так что насчет mysql_error? мы ж не кроссворд разгадываем, правда? чем больше отладочной информации - тем лучше.

Автор: MoLeX 11.12.2009, 17:03
skyboy, пусто. нечего нету. только вот эта строка:
Цитата

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in

Автор: skyboy 11.12.2009, 17:57
т.е. конструкция:
Код

$result = mysql_query("SELECT * FROM `fam` WHERE `fam` = 'Петров' ", $bd['city']) or die(mysql_error());
echo mysql_num_rows($result);

выдает только warning? я тебя правильно понял?

Автор: Pitlord 11.12.2009, 18:02
Цитата(MoLeX @  11.12.2009,  14:55 Найти цитируемый пост)
// Выбор таблиц

Это выбор БД, а не таблиц.

Цитата(MoLeX @  11.12.2009,  17:03 Найти цитируемый пост)
skyboy, пусто. нечего нету

Скорее всего mysql_error() вызываешь для не того идентификатора соединения (по умолчанию — последний открытый). Укажи конкретный link identifier.

Автор: MoLeX 12.12.2009, 08:30
Код

mysql_query("SELECT * FROM `table1`.`fam` WHERE `fam` = 'Петров' ", $bd['city'])


как видно причина была проста)))

Автор: Ипатьев 12.12.2009, 11:20
Это один из вариантов. 
Но указанный выше работать будет тоже. Тем более, если надо работать с несколькими серверами - тогда это будет единственный вариант.

Правда, названия наводят на размышления. Почему-то база данных называется, как таблица, а таблица - как колонка.
Возможно, что-то неправильно спроектировано. 

Автор: MoLeX 12.12.2009, 11:52
названия были придуманы от балды. суть дело от этого не меняет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)