因为有网站要换空间,用PHPMyAdmin导出的数据在重新导入时总是会出现问题,大多是因为特殊字符没有转意。我感觉可行的办法是用PHP一条一条的读入sql插入语句,然后对每条语句的数据部分进行转意,
现在想出的具体方法是利用preg_replace前的正则找到数据,再将其传给一个函数处理(我这里用了PHP自带的addslashes()函数),然后替换回去。
例如:<?PHP
$sql = "INSERT INTO `content`  VALUES('', 1, '生物卫生',  'tran,fer, R'NA',  '细胞内分子量最小的核酸,其功能是在蛋白质合成过程中作为各种氨基酸的载体并将其转呈给mRNA。');
";
echo preg_replace("/(?<=')([^']*)(?=',)/is", addslashes($1),$sql);
?>呵呵,这样的语句是有问题的,因为preg_replace的第二个参数是不能回调的,不知谁有相类似可行的方法呢?

解决方案 »

  1.   

    你的PHPMyAdmin版本多少?编码是否正确?我用PHPMyAdmin导入导出从来没有遇到你说的问题,导出后的sql中'都是转义过的。
      

  2.   

    我用的phpmyadmin版本是2.11.1由于导入大量数据,总是会出错,很是意思啊,所以才有写这种一个程序的想法~
      

  3.   

    有条件用mysql client不?你用mysqlclient 导进去看看?
      

  4.   


    如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。 
    只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。 Note: 本修正符在 PHP3 中不可用。 
    Example#4 使用 /e 修正符<?php
    preg_replace ("/(<\/?)(\w+)([^>]*>)/e",
                  "'\\1'.strtoupper('\\2').'\\3'",
                  $html_body);
    ?> 这将使输入字符串中的所有 HTML 标记变成大写。 
    把你有问题的sql语句贴上来看看 ^^
      

  5.   

    INSERT   INTO   `content`     VALUES('',   1,   '生物卫生',     'tran,fer,   R'NA',     '细胞内分子量最小的核酸,其功能是在蛋白质合成过程中作为各种氨基酸的载体并将其转呈给mRNA。');这样的一句就不行中啊。因为里面有逗号
      

  6.   

    用mysql命令导入最简单了,速度也快