Autor Zpráva
Nat
Profil *
Zdravím,

chtěl bych znát Váš názor na níže zapsaný kód. Má kopírovat obsah jedné tabulky v určité databázi do jiné databáze na stejném serveru. Chci to pouštět každé 3 hodiny jako cron. Zajímá mě co si o tom myslíte a případně jestli není nějaké triviálnější řešení a jestli toto neobsahuje nějaké zásadní chyby. Díky Nat


//definice zdroje

$source_server = "localhost";
$source_user = "user_test";
$source_pass = "password_test";
$source_db = "test";
$source_table = "test_users";
//definice cíle
$goal_server = "localhost";
$goal_user = "user_prace";
$goal_pass = "password_prace";
$goal_db = "prace";
$goal_table ="prace_users";

//spojeni se zdrrojovym serverem MySQL
$spoj = MySQL_Connect($source_server, $source_user, $source_pass);
if(!$spoj) echo "Nepodařilo se připojit k mySQL";

//vyber zdrojove databaze
mysql_select_db($source_db, $spoj);
$set = @mysql_query("SET NAMES CP1250");

//vyber tabulku a vse z ni z vybrane zdrojove databaze
$vybrat = mysql_query("SELECT * FROM ".$source_table."")
or die("Selhal dotaz na zdrojovou tabulku". " ".mysql_error());
if(!$vybrat) echo "Download dat selhal";

//uzavreni spojeni se zdrojovou databazi
MySQL_Close($spoj);


//spojeni s cilovym serverem MySQL
$spoj2 = MySQL_Connect($goal_server, $goal_user, $goal_pass);
if(!$spoj2) echo "Nepodařilo se připojit k mySQL";

//vyber cilove databaze
mysql_select_db($goal_db, $spoj2);
$set = @mysql_query("SET NAMES CP1250");

//smazani tabulky v cilove databazi
mysql_query("DROP TABLE ".$goal_table."")
or die("Selhal dotaz na smazání tabulky". " ".mysql_error());
if(!$vybrat) echo "Nepodařilo se smazat tabulku";

//vytvoreni tabulky v cilove databazi
//SQL dotaz
$dotaz = mysql_query("CREATE TABLE ".$goal_table." (
`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`name` varchar( 50 ) NOT NULL default '' ,
`username` varchar( 25 ) NOT NULL default '' ,
`email` varchar( 100 ) NOT NULL default '' ,
`password` varchar( 100 ) NOT NULL default '' ,
`usertype` varchar( 25 ) NOT NULL default '' ,
`block` tinyint( 4 ) NOT NULL default '0' ,
`sendEmail` tinyint( 4 ) default '0' ,
`gid` tinyint( 3 ) unsigned NOT NULL default '1' ,
`registerDate` datetime NOT NULL default '0000-00-00 00:00:00' ,
`lastvisitDate` datetime NOT NULL default '0000-00-00 00:00:00' ,
`activation` varchar( 100 ) NOT NULL default '' ,
`params` text NOT NULL ,
`user_info_id` varchar( 32 ) default NULL ,
`address_type` char( 2 ) default NULL ,
`address_type_name` varchar( 32 ) default NULL ,
`company` varchar( 64 ) default NULL ,
`title` varchar( 32 ) default NULL ,
`last_name` varchar( 32 ) default NULL ,
`first_name` varchar( 32 ) default NULL ,
`middle_name` varchar( 32 ) default NULL ,
`phone_1` varchar( 32 ) default NULL ,
`phone_2` varchar( 32 ) default NULL ,
`fax` varchar( 32 ) default NULL ,
`address_1` varchar( 64 ) NOT NULL default '' ,
`address_2` varchar( 64 ) default NULL ,
`city` varchar( 32 ) NOT NULL default '' ,
`state` varchar( 32 ) NOT NULL default '' ,
`country` varchar( 32 ) NOT NULL default 'CZ' ,
`zip` varchar( 32 ) NOT NULL default '' ,
`extra_field_1` varchar( 255 ) default NULL ,
`extra_field_2` varchar( 255 ) default NULL ,
`extra_field_3` varchar( 255 ) default NULL ,
`extra_field_4` char( 1 ) default NULL ,
`extra_field_5` char( 1 ) default NULL ,
`perms` varchar( 40 ) NOT NULL default 'shopper' ,
`bank_account_nr` varchar( 32 ) NOT NULL default '' ,
`bank_name` varchar( 32 ) NOT NULL default '' ,
`bank_sort_code` varchar( 16 ) NOT NULL default '' ,
`bank_iban` varchar( 64 ) NOT NULL default '' ,
`bank_account_holder` varchar( 48 ) NOT NULL default '' ,
`bank_account_type` enum( 'Checking' , 'Business Checking' , 'Savings' ) NOT NULL default 'Checking' ,
PRIMARY KEY ( `id` ) ,
KEY `usertype` ( `usertype` ) ,
KEY `idx_name` ( `name` )
) TYPE = MYISAM ;")
or die("Selhal dotaz na vytvoření tabulky". " ".mysql_error());
if(!$vybrat) echo "Nepodařilo se vytvořit tabulku";

//cyklus ze zdroje do cile vlozeni postupne vsech radku s uzivateli
while($zaznam = mysql_fetch_array($vybrat)):

//SQL dotaz na ulozeni do tabulky
$SQLText="INSERT INTO ".$goal_table."
(id, name, username, email, password, usertype, block, sendEmail, gid, registerDate, lastvisitDate, activation, params, user_info_id, address_type, address_type_name, company, title, last_name, first_name, middle_name, phone_1, phone_2, fax, address_1, address_2, city, state, country, zip, extra_field_1, extra_field_2, extra_field_3, extra_field_4, extra_field_5, perms, bank_account_nr, bank_name, bank_iban, bank_account_holder, bank_account_type)
VALUES ('$zaznam[id]', '$zaznam[name]', '$zaznam[username]', '$zaznam[email]', '$zaznam[password]', '$zaznam[usertype]', '$zaznam[block]', '$zaznam[sendEmail]', '$zaznam[gid]', '$zaznam[registerDate]', '$zaznam[lastvisitDate]', '$zaznam[activation]', '$zaznam[params]', '$zaznam[user_info_id]', '$zaznam[address_type]', '$zaznam[address_type_name]', '$zaznam[company]', '$zaznam[title]', '$zaznam[last_name]', '$zaznam[first_name]', '$zaznam[middle_name]', '$zaznam[phone_1]', '$zaznam[phone_2]', '$zaznam[fax]', '$zaznam[address_1]', '$zaznam[address_2]', '$zaznam[city]', '$zaznam[state]', '$zaznam[country]', '$zaznam[zip]', '$zaznam[extra_field_1]', '$zaznam[extra_field_2]', '$zaznam[extra_field_3]', '$zaznam[extra_field_4]', '$zaznam[extra_field_5]', '$zaznam[perms]', '$zaznam[bank_account_nr]', '$zaznam[bank_name]', '$zaznam[bank_iban]', '$zaznam[bank_account_holder]', '$zaznam[bank_account_type]')";

$ulozeni = mysql_query($SQLText,$spoj2)
or die("Selhal dotaz na databázi uložení dat do nové tabulky". " ".mysql_error());
if(!$ulozeni) echo "Uložení dat selhalo";

endwhile;

//ukonceni spojeni s cilovou databazi
MySQL_Close($spoj2);
xixli
Profil
Keďže je to na tej istej mašine, a predpokladám že máš práva k obidvom databázam, tak sprav niečo ako toto:
create table novadatabaza.test like staradatabaza.test
insert into novadatabaza.test (select * from staradatabaza.test)
možné ale až od mysql 4.1 - ale ako sa pozerám, máš mysql 4.1 (SET NAMES CP1250) ...
Paja
Profil *
Vyzkouším vypadá to zajímavě, uvidím na co narazím, jinak přístup mám ke všemu a je to na stejné mašině.
Nat
Toto téma je uzamčeno. Odpověď nelze zaslat.