Пишу скрипт для миграции сайта с другого движка на Друпал.
Пока импортирую данные в термины, и сразу возникла странная проблема.
Вот код:
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;
После выполнения сразу получаю вот такую ошибку:
Удалось выявить источник проблемы. Это строка, где присваивает значение имени термина, которое берется из строки результата запроса.
Если вместо $row['name'] подставить строковую константу, то термин нормально добавляется.
Пробовал сначала присваивать значение $row['name'] в переменную - не помогает. Никаких подозрительных символов в значениях нет, длина не более 30 символов.
В чем может быть проблема?
Комментарии
посм здесь рабочий пример
добавление термина таксономии
Спасибо за ссылку, но это более менее понятно.
ошибка возникает если имя для термина взято из базы.. вот это непонятное явление
Собственно вопрос остается открытым. Такая проблема возникает и при импортировании нод. Ноды создаю вручную. Если в какое-либо свойство ноды записывается значение взятое из row, выбранной из сторонней базы, то node_save выдает ошибку.
Пока, единственная идея возникновения проблемы состоит в том, что таблица с оригинальными данными, которые нужно импортировать имеет Collation cp1251_general_ci, в то время как таблицы друпала utf8_general_ci.
Может быть проблема из-за этого?
Делайте как все нормальные люди через db_query() или если уж пошли по странному пути с mysql_query(), то делайте SET NAMES UTF8
Что-то я не пойму как делать через db_query? Там же коннекшн настроен на друпаловскую базу В КОТОРУЮ происходит импорт.
Как же через db_query подцепиться к другой базе, из которой нужно брать данные?
Открываем settings.php, находим строчку подключения к базе, читаем рядом комментарии, стыдно за три года этого не узнать
или даже вот, лучше решать проблему неделями, чем сходить в поиск, всяко
http://www.google.com/search?client=ubuntu&channel=fs&q=%D0%9A%D0%B0%D0%...
Спасибо большое
Можно и тут почитать http://drupal.org/node/18429 Как раз так и называется How to connect to multiple databases within Drupal - черным по белому