使用php解析mysql转储文件中的值?

使用php解析mysql转储文件中的值?,php,mysqldump,Php,Mysqldump,PHP是否有脚本或类来解析mysql转储文件中的插入值?我编写了一个脚本,用于处理来自导出的数据。我想解析所有的值来进行一致性测试,我想知道这个问题是否已经解决了 例如,在转储文件中,我有 INSERT INTO table ( field1, field2, ... ) VALUES ( "a", "B", ...); 我想提取 a B 测试这些价值观,看看它们是我认为应该的 我还需要它来处理扩展的insert格式,即值(“a”,“B”,“…),(“c”,“D”,“…),(“e”,“F”,

PHP是否有脚本或类来解析mysql转储文件中的插入值?我编写了一个脚本,用于处理来自导出的数据。我想解析所有的值来进行一致性测试,我想知道这个问题是否已经解决了

例如,在转储文件中,我有

INSERT INTO table ( field1, field2, ... ) VALUES ( "a", "B", ...);
我想提取

a
B
测试这些价值观,看看它们是我认为应该的


我还需要它来处理扩展的insert格式,即
值(“a”,“B”,“…),(“c”,“D”,“…),(“e”,“F”,“…),

php sql解析器应该做您想做的事情。以下是其手册的链接:


鉴于您的评论,我想就我认为最好的处理方法提供一些建议

  • 您不应该将序列化数据存储在关系数据库中。相反,您应该规范化数据,使您能够充分利用关系数据库提供的功能。我不知道您的项目对此的依赖程度有多深,但如果可能,我强烈建议重构

  • >P>如果您必须继续存储/使用序列化数据(强烈建议对此),我会考虑完全避免转储,并使用如下类似的内容:

    用PHP处理数据,然后直接更新:

    $tables = $db->query("SHOW tables");
    foreach ($tables as $table) {
        $rows = $db->query("SELECT * FROM $table");
        foreach ($rows as $row) {
            $foo = unserialize($row['foo']);
            $foo = massage($foo);
            $db->query("UPDATE $table SET foo=$foo");
        }
    }
    

    为什么不在一个单独的数据库中运行查询,这样就可以与PHP/mysql进行比较,而不是解析文本?@markus由于我的脚本处理转储文件,所以我希望它是自包含的(我还在测试脚本是否正确处理数据)。如果我可以避免通过数据库来运行脚本,那就太好了。此外,由于经过处理的数据几乎可以出现在任何表和字段中,因此我必须运行类似于
    SELECT*FROM*
    的查询,这可能是一个很难构建的问题。这不是一次性的数据篡改;这是一个将定期使用的脚本。那么,告诉al更多关于您的设置和要求。因为你提出的解决方案似乎很老套而且注定要失败。@Markus你具体想知道什么?我所要做的就是从一个文件中取出
    a,B,…
    ,该文件包含
    插入到。。。(“a”、“B”和…)
    。这是一个在命令行上运行的php脚本,但这与实际的解析无关。您能否提供更多关于转储文件的来源以及使用转储文件的目的的详细信息?很可能有比你在问题中要求的更好的方法来处理这个问题。我感谢你努力帮助解决这个问题,但我不能使用你的建议。我们正在使用Drupal,它在数据库中存储序列化字符串。别想逃避这个。我们有一个迁移涉及转储文件的站点的过程,不需要回避这个问题。相信我,我经历过这一切。我要找的只是一个PHP SQL解析器,比如链接到的gschwa。我拒绝提供背景信息以避免这样的正交答案。但是我很感激。@user151841好吧,如果这个评论是在问题中的话,我就不会写这个:)还有pear.php.net/SQL_解析器,但我想大家都知道它有一些bug。我的问题很简单,要求使用php SQL解析器。你给了我解决问题的办法,但没有回答我的问题。当人们开始询问更多的背景资料时,我开始闻到一股“死鸟”(dead bird)的味道。如果你把梨子图书馆作为答案,我会投它一票:)