Миграция терминов с другой базы

Главные вкладки

Аватар пользователя Zigs Zigs 25 августа 2011 в 17:48

Пишу скрипт для миграции сайта с другого движка на Друпал.
Пока импортирую данные в термины, и сразу возникла странная проблема.

Вот код:

define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

/* connect to original local database */
$db_link = mysql_connect("localhost", "admin", "admin")
    or die("Could not connect: original local database" . mysql_error());
mysql_select_db('kitty', $db_link) or die ('Can\'t use foo : ' . mysql_error());
$vocabulary = taxonomy_vocabulary_load(2);
$res = mysql_query('select * from term_data');

while ($row = mysql_fetch_array($res, MYSQL_ASSOC)):
   
    $p_term = new stdClass();
    $p_term->tid = '';
    $p_term->vid = $vocabulary->vid;
    $p_term->name = $row['name'];
    $p_term->format = db_query_range('SELECT format FROM {filter_format}', 0, 1)->fetchField();
    $p_term->field_category_image = array(
        'und' => array (
        )
    );
   
    taxonomy_term_save($p_term);
   
endwhile;    

После выполнения сразу получаю вот такую ошибку:

PDOException: in drupal_write_record() (line 6861 of Z:\home\grandecor.loc\www\includes\common.inc).

Удалось выявить источник проблемы. Это строка, где присваивает значение имени термина, которое берется из строки результата запроса.
Если вместо $row['name'] подставить строковую константу, то термин нормально добавляется.
Пробовал сначала присваивать значение $row['name'] в переменную - не помогает. Никаких подозрительных символов в значениях нет, длина не более 30 символов.

В чем может быть проблема?

Комментарии

Аватар пользователя Zigs Zigs 26 августа 2011 в 13:17

Спасибо за ссылку, но это более менее понятно.
ошибка возникает если имя для термина взято из базы.. вот это непонятное явление

Аватар пользователя Zigs Zigs 7 сентября 2011 в 17:12

Собственно вопрос остается открытым. Такая проблема возникает и при импортировании нод. Ноды создаю вручную. Если в какое-либо свойство ноды записывается значение взятое из row, выбранной из сторонней базы, то node_save выдает ошибку.

Пока, единственная идея возникновения проблемы состоит в том, что таблица с оригинальными данными, которые нужно импортировать имеет Collation cp1251_general_ci, в то время как таблицы друпала utf8_general_ci.
Может быть проблема из-за этого?

Аватар пользователя Zigs Zigs 7 сентября 2011 в 17:52

Что-то я не пойму как делать через db_query? Там же коннекшн настроен на друпаловскую базу В КОТОРУЮ происходит импорт.
Как же через db_query подцепиться к другой базе, из которой нужно брать данные?

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 7 сентября 2011 в 18:22

"Zigs" wrote:

Как же через db_query подцепиться к другой базе, из которой нужно брать данные?


Открываем settings.php, находим строчку подключения к базе, читаем рядом комментарии, стыдно за три года этого не узнать