Autor | Zpráva | ||
---|---|---|---|
Matess Profil * |
#1 · Zasláno: 5. 1. 2016, 16:34:13
Dobrý den vespolek.
Chtěl bych zkopírovat určitá data z jedné tabulky a vložit je do druhé. Problém je v tom, že těch řádků jsou desítky a nechce se mi to dělat ručně. Můžete mi prosím poradit jak na to? (Chci zkopírovat články z Joomly do Wordpressu.) Zkouším to takto: $result = mysql_query("SELECT * FROM jm_content ORDER BY id LIMIT 1"); while ($row = mysql_fetch_object($result)) { INSERT INTO 'd112452_fe24c3a'.'bjk4_posts' ('ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_content_filtered', 'post_parent', 'guid', 'menu_order', 'post_type', 'post_mime_type', 'comment_count') VALUES (NULL, '0', $row->created, $row->created, $row->introtext, $row->title, '', 'publish', 'open', 'open', '', $row->alias, '', '', $row->publish_up, $row->publish_up, '', '0', '', '0', 'post', '', '0'); } To mi ale vypíše chybu: Parse error: syntax error, unexpected 'INTO' (T_STRING) in /data/web/virtuals/112442/virtual/www/domains/example.com/prevod.php on line 23 Můžete mi prosím poradit co dělám špatně a kde? |
||
smitka Profil |
#2 · Zasláno: 5. 1. 2016, 16:43:24
Problém je v tom, že INSERT INTO... nemáš v uvozovkách a není patrné co s tím řetězcem vůbec chceš dělat.
Takže pokud bys chtěl si nechat vygenereovat sadu SQL příkazů, tak bych před to celé dal echo ", na řádku 28 by pak bylo třeba obalit přístup k objektům do složených závorek (nebo ukončit a znovu otevřít řetězec) a raději to obalit do uvozovek: $row->created na '{$row->created}' atd. Pokud bys ty příkazy chtěl rovnou vykonat, tak místo echo jen dát mysql_query. Případně existují migrační pluginy, ale bohužel s nimi nemám osobní zkušenosti např. wordpress.org/plugins/fg-joomla-to-wordpress. |
||
Matess Profil * |
#3 · Zasláno: 5. 1. 2016, 17:02:02
smitka:
Děkuji za rychlou odpověď. Když to celé dám do echo "", tak se mi to vypíše na monitor, ale pokud dám místo echo mysql_query, tak vypíše chybu Parse error: syntax error, unexpected '"' in /data/web/virtuals/... Takže jsem dal za mysql_query závorku, potom uvozovky, dále celý kod, a na konec uvozovky a závorku. Když to spustím, tak to na monitor nevypíše nic (ani chybu), ale v databázi se nové řádky neobjeví. Bohužel nevím proč?! (Mysql_error nic nevypíše.) Celý kod teď vypadá takto: $result = mysql_query("SELECT * FROM jm_content ORDER BY id LIMIT 10"); while ($row = mysql_fetch_object($result)) { mysql_query "INSERT INTO 'd112452_fe24c3a'.'bjk4_posts' ('ID', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_content_filtered', 'post_parent', 'guid', 'menu_order', 'post_type', 'post_mime_type', 'comment_count') VALUES (NULL, '0', {$row->created}, {$row->created}, {$row->introtext}, {$row->title}, '', 'publish', 'open', 'open', '', {$row->alias}, '', '', {$row->publish_up}, {$row->publish_up}, '', '0', '', '0', 'post', '', '0');"; } echo mysql_error(); Pluginy jsem nějaké zkoušel, ale chci to zkusit takto. |
||
mimochodec Profil |
Matess:
Podívej se, jak funguje php.net/manual/en/function.mysql-query.php |
||
juriad Profil |
Matess:
Místo apostrofů na řádcích 3 - 26 musíš použít zpětné apostrofy. `
|
||
Matess Profil * |
#6 · Zasláno: 5. 1. 2016, 17:28:43
mimochodec:
Anglicky neumím, ale s překladačem jsem přišel na to, že tam nesmí být na konci středník. Myslel si toto? juriad: Děkuji. Upravil jsem to a teď to háže zase jinou chybu. 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 '07:37:32, 2014-04-01 07:37:32, 12. se koná v Havířově Poh' at line 26 Na řádku 26 mám `post_date`, řádek 24: (`ID`, řádek 25: `post_author`, řádek 26: `post_date`, řádek 27: `post_date_gmt`, ... |
||
juriad Profil |
#7 · Zasláno: 5. 1. 2016, 17:32:24
Matess:
To se týká toho řádku, kde vkládáš datum. Datumový literál musí být uvozený apostrofy. Tedy: .. '{$row->created}', |
||
Matess Profil * |
#8 · Zasláno: 5. 1. 2016, 17:59:03
juriad:
Už to funguje. Děkuji všem za vaše rady. |
||
xROAL Profil |
#9 · Zasláno: 5. 1. 2016, 23:13:00
Dovolím si dodať, že v SQL existuje
INSERT...SELECT .
V praxi (v skrátenej verzii): INSERT INTO `d112452_fe24c3a`.`bjk4_posts` (`id`, `post_author`, `post_date`) SELECT NULL, "0", `created` FROM `jm_content` ORDER BY `id` LIMIT 10 Netrúfam si tvrdiť, ako je to s výkonom (aj keď verím, že takto si to databáza vie lepšie optimalizovať, tiež je v tomto prípade menej komunikácie medzi databázou a klientom), no každopádne mi to príde ako pohodlnejšie/prehľadnejšie riešenie. |
||
Časová prodleva: 9 let
|
0