我需要使用PHP将数据从一个MySQL数据库复制到另一个MySQL数据库.
我可以构建所有值的数组并将其放入另一个数据库,但首先我要确保数据库在插入之前具有正确的字段.
例如,假设我要将数据从tableA复制到tableB.
我可以设置tableB看起来就像tableA但是将来我可能会向tableA添加列而忘记将它们添加到tableB,然后我的PHP脚本将尝试将数据插入到tableB中不存在的列中它将会失败.
所以我想要做的是将tableA与tableB进行比较,以及tableA具有的任何列,tableB没有将它们添加到tableB.
谁能告诉我怎么做?
感谢大家,基于你的所有帮助,我能够编写一个PHP类,它将表A中的任何列复制到表B(如果它们还不存在):
class MatchTable { var $_table_one_name; var $_table_two_name; var $_table_one_db_user; var $_table_one_db_pass; var $_table_one_db_host; var $_table_one_db_name; var $_table_two_db_user; var $_table_two_db_pass; var $_table_two_db_host; var $_table_two_db_name; var $_table_one_columns = array(); var $_table_two_columns = array(); var $_table_one_types = array(); var $_table_two_types = array(); var $_table_one_link; var $_table_two_link; var $_isTest; function MatchTable($isLive = true) { $this->_isTest = !$isLive; } function matchTables($table1, $table2) { $this->_table_one_name = $table1; $this->_table_two_name = $table2; if(isset($this->_table_one_db_pass)) { $this->db_connect('ONE'); } list($this->_table_one_columns,$this->_table_one_types) = $this->getColumns($this->_table_one_name); if(isset($this->_table_two_db_pass)) { $this->db_connect('TWO'); } list($this->_table_two_columns,$this->_table_two_types) = $this->getColumns($this->_table_two_name); $this->addAdditionalColumns($this->getAdditionalColumns()); } function setTableOneConnection($host, $user, $pass, $name) { $this->_table_one_db_host = $host; $this->_table_one_db_user = $user; $this->_table_one_db_pass = $pass; $this->_table_one_db_name = $name; } function setTableTwoConnection($host, $user, $pass, $name) { $this->_table_two_db_host = $host; $this->_table_two_db_user = $user; $this->_table_two_db_pass = $pass; $this->_table_two_db_name = $name; } function db_connect($table) { switch(strtoupper($table)) { case 'ONE': $host = $this->_table_one_db_host; $user = $this->_table_one_db_user; $pass = $this->_table_one_db_pass; $name = $this->_table_one_db_name; $link = $this->_table_one_link = mysql_connect($host, $user, $pass, true); mysql_select_db($name) or die(mysql_error()); break; case 'TWO'; $host = $this->_table_two_db_host; $user = $this->_table_two_db_user; $pass = $this->_table_two_db_pass; $name = $this->_table_two_db_name; $link = $this->_table_two_link = mysql_connect($host, $user, $pass, true); mysql_select_db($name) or die(mysql_error()); break; default: die('Improper parameter in MatchTable->db_connect() expecting "one" or "two".'); break; } if (!$link) { die('Could not connect: ' . mysql_error()); } } function getColumns($table_name) { $columns = array(); $types = array(); $qry = 'SHOW COLUMNS FROM '.$table_name; $result = mysql_query($qry) or die(mysql_error()); while($row = mysql_fetch_assoc($result)) { $field = $row['Field']; $type = $row['Type']; /* $column = array('Field' => $field, 'Type' => $type); array_push($columns, $column); */ $types[$field] = $type; array_push($columns, $field); } $arr = array($columns, $types); return $arr; } function getAdditionalColumns() { $additional = array_diff($this->_table_one_columns,$this->_table_two_columns); return $additional; } function addAdditionalColumns($additional) { $qry = ''; foreach($additional as $field) { $qry = 'ALTER TABLE '.$this->_table_two_name.' ADD '.$field.' '.$this->_table_one_types[$field].'; '; if($this->_isTest) { echo $qry.'
'; } else { mysql_query($qry) or die(mysql_error()); } } } /** * End of Class */ }