Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перенос контента из одной одной таблицы в другую

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не могу понять в чем проблема
hanns-g
Отправлено: 12 Февраля, 2014 - 00:41:16
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Надо перенести контент из одной таблицы БД(старая джумла 1.0) в другую (джумла 2.5)
написал код:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. mysql_query("
  4. ALTER TABLE `gorod2`.`s_content` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
  5. ");
  6.  
  7. mysql_query("SET CHARACTER SET 'utf-8'");
  8. mysql_query("SET NAMES 'utf-8'");
  9. mysql_set_charset('utf8');
  10.  
  11. $cat_id = 9;
  12.  
  13. $sql = "
  14. SELECT *
  15. FROM s_content
  16. WHERE catid = ".$cat_id."
  17. ";
  18.  
  19.         echo "<hr />";
  20.  
  21.  
  22. $res = mysql_query($sql) or die(mysql_error());
  23.  
  24. while ($row = mysql_fetch_object($res))
  25. {
  26.         if ($row->id != 0)
  27.         {
  28.                 echo "<br />";
  29.                
  30.                
  31.                 $sql = "INSERT INTO `st_content` VALUES ('".$row->id."', NULL, '".$row->title."', '".$row->title_alias."', NULL, '".$row->introtext."', '".$row->fulltext."', '".$row->state."', '0', '0', '".$cat_id."', '".$row->created."', '6', NULL, '".$row->modified."', '6', '0', '".$row->checked_out_time."', '".$row->publish_up."', '".$row->publish_down."', '{\"image_intro\":\"\",\"float_intro\":\"\",\"image_intro_alt\":\"\",\"image_intro_caption\":\"\",\"image_fulltext\":\"\",\"float_fulltext\":\"\",\"image_fulltext_alt\":\"\",\"image_fulltext_caption\":\"\"}', '{\"urla\":null,\"urlatext\":\"\",\"targeta\":\"\",\"urlb\":null,\"urlbtext\":\"\",\"targetb\":\"\",\"urlc\":null,\"urlctext\":\"\",\"targetc\":\"\"}', '{\"show_title\":\"\",\"link_titles\":\"\",\"show_intro\":\"\",\"show_category\":\"\",\"link_category\":\"\",\"show_parent_category\":\"\",\"link_parent_category\":\"\",\"show_author\":\"\",\"link_author\":\"\",\"show_create_date\":\"\",\"show_modify_date\":\"\",\"show_publish_date\":\"\",\"show_item_navigation\":\"\",\"show_icons\":\"\",\"show_print_icon\":\"\",\"show_email_icon\":\"\",\"show_vote\":\"\",\"show_hits\":\"\",\"show_noauth\":\"\",\"urls_position\":\"\",\"alternative_readmore\":\"\",\"article_layout\":\"\",\"show_publishing_options\":\"\",\"show_article_options\":\"\",\"show_urls_images_backend\":\"\",\"show_urls_images_frontend\":\"\"}', '".$row->version."', '0', '".$row->ordering."', NULL, NULL, '".$row->access."', '".$row->hits."', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\",\"xreference\":\"\"}', '0', '*', NULL";
  32.  
  33.                 echo $sql;
  34.                 mysql_query($sql) or die(mysql_error());
  35.                 echo "<br />=======================================================<br /><br />";
  36.                
  37.                
  38.         }
  39. }
  40. mysql_close();
  41.  


Первый запрос проходит на ура, то есть данные с таблицы формирует хорошо,
ну а второй запрос, где идет уже само наполнение новой таблицы - пишет:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

немогу понять чего оно хочет, вроде все правильно
посмотрите пожалуйста новым взглядом
(Добавление)
Я так понимаю оно ругается на пустое значение ячейки - ''
но если оно пустое и в оригинале тогда как сделать?
(Добавление)
сделал проверку на заполнение

if ($row->title_alias=='') {$row->title_alias='NULL';}
if ($row->introtext=='') {$row->introtext='NULL';}
if ($row->fulltext=='') {$row->fulltext='NULL';}

ничего не поменялось, люди подскажите пожалуйста!
(Добавление)
пробовал убирать поля с параметрами - ничего не дало (те которые с "")
--------------------
вот результат выполнения скрипта:

INSERT INTO `st_content` VALUES ('23', NULL, 'Канское медицинское училище', 'NULL', NULL, '

63600, г. Канск, ул. Революции, 20

Ермухометов Николай Иванович

телефон: 4-31-58

факс: 3-31-58
', 'NULL', '1', 0, 0, '9', '2009-08-11 23:23:51', 6, NULL, '2009-08-11 23:51:14', 6, 0, '0000-00-00 00:00:00', '2009-08-11 23:22:14', '0000-00-00 00:00:00', '{"image_intro":"","float_intro":"","image_intro_alt":"", ..., 0, '*', NULL

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
================================ ====
Кажись нашел проблему, в ячейке интротекст и фултекст есть теги и символы,
а вот как сделать чтобы запрос понимал что это текст из одной ячейки,
а не какието спец. символы ?

(Отредактировано автором: 12 Февраля, 2014 - 01:17:30)

 
 Top
caballero
Отправлено: 12 Февраля, 2014 - 01:23:53
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




обычно полагается проставлять слеши функциями типа mysql_real_escape_string

и нафига вы каждый раз делаете alter table


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
hanns-g
Отправлено: 12 Февраля, 2014 - 01:50:46
Post Id


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Разобрался с экранированием ячейки:

caballero пишет:
обычно полагается проставлять слеши функциями типа mysql_real_escape_string

Большое спасибо!

caballero пишет:
и нафига вы каждый раз делаете alter table

Улыбка

УРА!!!
Заработало!!!

если кому надо будет, может вспомнит хорошим словом )))
напоминаю для тех кто в танке (как и я пару часов назад):
1. надо правильно указывать имена таблиц
2. я новую и старую джумлу ставил на одну БД с разными префиксами
3. материалы не переносятся все, а только из нужных категорий,
ИД которой(из старой джумла) прописан в коде (смотрите коментарий)

Вот правильные код:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. // Подключение к БД
  4. // вводим свои данные
  5.  
  6. $host = "localhost";
  7. $user = "root";
  8. $pass = "";
  9. $db = "gorod2";
  10.  
  11. $link = mysql_connect($host,$user,$pass) or die(mysql_error());
  12. mysql_selectdb($db,$link) or die(mysql_error());
  13.  
  14.  
  15.  
  16. /* меняем кодировку с 1251 на утф 8
  17. */
  18. ALTER TABLE `gorod2`.`s_content` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
  19. ");
  20.  
  21. mysql_query("SET CHARACTER SET 'utf-8'");
  22. mysql_query("SET NAMES 'utf-8'");
  23.  
  24.  
  25.  
  26. /*  Категория материалы которой копируем
  27.         и категория новой джумла, в которую копируем
  28. */
  29.  
  30. $cat_id = 12;
  31. $newcat_id = 9;
  32. /*  Собираем инфу со старой таблицы
  33.         тут надо указать имя таблицы с правильным префиксом
  34. */
  35.  
  36. $sql = "
  37. SELECT *
  38. FROM s_content
  39. WHERE catid = ".$cat_id."
  40. ";
  41.  
  42.  
  43.  
  44. $res = mysql_query($sql) or die(mysql_error());
  45.  
  46. // Переребираем элементы таблицы
  47.  
  48. while ($row = mysql_fetch_object($res))
  49. {
  50.         echo $row->id;
  51.         echo "<br />";
  52.         echo $row->title;
  53.         if ($row->id != 0)
  54.         {
  55.        
  56.                 if ($row->introtext == "") {$row->introtext = "";}else{$row->introtext = "".mysql_escape_string($row->introtext)."";}
  57.                 if ($row->fulltext == "") {$row->fulltext = "";}else{$row->fulltext = "".mysql_escape_string($row->fulltext)."";}
  58.                 $row->access = 1;
  59.                
  60. // Не забываем прописать имя таблицы джумла 2.5 с правильным префиксом
  61.  
  62.                 $sql = "INSERT INTO `st_content` VALUES ('".$row->id."', '', '".$row->title."', '".$row->title_alias."', '".$row->title_alias."', '".$row->introtext."', '".$row->fulltext."', '".$row->state."', 0, 0, '".$newcat_id."', '".$row->created."', 6, '', '".$row->modified."', 6, 0, '".$row->checked_out_time."', '".$row->publish_up."', '".$row->publish_down."', '{\"image_intro\":\"\",\"float_intro\":\"\",\"image_intro_alt\":\"\",\"image_intro_caption\":\"\",\"image_fulltext\":\"\",\"float_fulltext\":\"\",\"image_fulltext_alt\":\"\",\"image_fulltext_caption\":\"\"}', '{\"urla\":null,\"urlatext\":\"\",\"targeta\":\"\",\"urlb\":null,\"urlbtext\":\"\",\"targetb\":\"\",\"urlc\":null,\"urlctext\":\"\",\"targetc\":\"\"}', '{\"show_title\":\"\",\"link_titles\":\"\",\"show_intro\":\"\",\"show_category\":\"\",\"link_category\":\"\",\"show_parent_category\":\"\",\"link_parent_category\":\"\",\"show_author\":\"\",\"link_author\":\"\",\"show_create_date\":\"\",\"show_modify_date\":\"\",\"show_publish_date\":\"\",\"show_item_navigation\":\"\",\"show_icons\":\"\",\"show_print_icon\":\"\",\"show_email_icon\":\"\",\"show_vote\":\"\",\"show_hits\":\"\",\"show_noauth\":\"\",\"urls_position\":\"\",\"alternative_readmore\":\"\",\"article_layout\":\"\",\"show_publishing_options\":\"\",\"show_article_options\":\"\",\"show_urls_images_backend\":\"\",\"show_urls_images_frontend\":\"\"}', '".$row->version."', 0, '".$row->ordering."', '', '', '".$row->access."', '".$row->hits."', '{\"robots\":\"\",\"author\":\"\",\"rights\":\"\",\"xreference\":\"\"}', 0, '*', '')";
  63.  
  64.  
  65.                 echo $sql.'<br /><br />';
  66.                 mysql_query($sql) or die(mysql_error());
  67.                 echo "<br />=======================================================<br /><br />";
  68.                
  69.                
  70.         }
  71. }
  72. /**/
  73.         echo "<hr />";
  74. ?>
  75.  

(Отредактировано автором: 12 Февраля, 2014 - 02:39:03)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB