2015-02-08 67 views
-4

我正在将一个数据库表复制到具有相同模式的其他数据库表中。我在一个数据库中有三张表1)客户2)订购3)产品。 当我运行我的代码时,它成功地将客户表的数据复制到数据库2的客户表中,但是当它为订单表计时时,它会生成一个错误 您的SQL语法错误;检查对应于你的MySQL服务器版本在线路附近使用“秩序”正确的语法手册1个 我的代码是在这里:在其他文件SQL语法错误,PHP

$dbname = "db1"; 
$db1= new database_connection(); 
$link = $db1->get_connection($dbname); 

$dbname1="db2"; 
$db2=new database_connection(); 
$link1=$db2->get_connection($dbname1); 

$sql = "SHOW TABLES FROM $dbname"; 
$result = mysql_query($sql,$link); 

if (!$result) { 
    echo "DB Error, could not list tables\n"; 
    echo 'MySQL Error: ' . mysql_error(); 
    exit; 
} 
$tables= array(); 
while ($row = mysql_fetch_row($result)) { 
    array_push($tables,$row[0]); 
} 
//print_r($tables); 
$i=0; 
echo "tables = ". count($tables); 
while($i<count($tables)){ 
    echo "i= $i"; 

    $fields=array(); 
    $query="SHOW COLUMNS FROM $tables[$i]"; 
    $result = mysql_query($query,$link) or die(mysql_error($link)); 

    if (!$result) { 
     echo 'Could not run query1: ' . mysql_error(); 
     exit; 
    } 


    //fields of table 
    if (mysql_num_rows($result) > 0) { 
     while ($row = mysql_fetch_assoc($result)) { 
       array_push($fields, $row['Field']); 
       } 
      //print_r($fields); 

      $value=$db1->get_column($tables[$i],$fields,$link); 
      echo "extracted"; 
       $db2->insert_column($tables[$i],$fields,$value,$link1); 
       echo "insertrd"; 
      //print_r($value); 

    } 
    unset($fields); 
    $i = $i + 1; 
} 

功能

function get_column($table,$row,$link){ 

     $result=mysql_query("SELECT * FROM $table",$link) or die(); 
      $data=array(); 
      while($row = mysql_fetch_assoc($result)){ 
      //unset($row["0"]); //get rid of the "sorting col" 
      array_push($data,$row); //or whatever ;) 


      } 
      return $data; 

    } 
     //return $result; 
    } 
    function insert_column($table,$field,$value,$link1){ 
     $count_fields=count($value); 
     echo "count $count_fields"; 
      $j=0; 
      while ($j <$count_fields) { 
        $array=array(); 
        $array=$value[$j]; 

        $sqll= " ('".implode("', '", $array)."') "; 
        $sql="INSERT INTO $table VALUES " . ($sqll);; 
        //$sql=mysql_real_escape_string($sql); 
        echo "$sql"; 
        mysql_query($sql,$link1) or die(mysql_error()); 
        $j= $j +1; 
       }  


} 

请帮我谢谢

+1

注意'order'是一个保留字 – Strawberry 2015-02-08 13:29:54

回答

0

order是SQL中用于ORDER BY子句的保留字。所以你不能像那样使用它。

您应该将表名更改为其他名称,或者每次在SQL查询中使用此表名时都必须使用反引号。

例如,而不是

$sql="INSERT INTO $table VALUES " . ($sqll); 

不喜欢它:

$sql="INSERT INTO `$table` VALUES " . ($sqll); 

Here你必须在MySQL的保留字完整列表

+0

停止给我发痒 – Strawberry 2015-02-08 13:40:41

+0

@Strawberry ok ;-) – 2015-02-08 13:43:01