2011-09-21 32 views
1

是否有腳本或類來解析來自mysql轉儲文件的插入值的PHP?我寫了一個腳本,用於按照導出的數據。我想解析所有的值來做一些符合性測試,我想知道這個問題是否已經解決了。使用PHP解析mysql轉儲文件中的值?

例如,在轉儲文件,我有

INSERT INTO table (field1, field2, ...) VALUES ("a", "B", ...); 

,我想提取

a 
B 

,以測試這些值,看看他們是什麼,我認爲他們應該。

我也需要這個能夠處理擴展插入格式,這是VALUES ("a", "B", ...), ("c", "D", ...), ("e", "F", ...),

+3

爲什麼不在單獨的數據庫中運行查詢,以便您可以使用PHP/mysql進行這些比較而不是解析文本? – markus

+0

@markus因爲我的腳本按摩了一個轉儲文件,我想保持它的所有獨立(我也測試腳本正確地按摩數據)。如果我可以避免通過數據庫來運行腳本,那會很棒。另外,由於按摩數據幾乎可以出現在任何表和字段中,所以我必須運行一個查詢,比如'SELECT * FROM *',這可能會很麻煩。這不是一次性的數據按摩;這是一個將經常使用的腳本。 – user151841

+1

那麼,告訴你更多關於你的設置和要求。因爲你提出的解決方案看起來很冒險並且註定要失敗。 – markus

回答

2

php-sql-parser應該做你想做的。這裏有一個鏈接到它的手冊:

​​

0

考慮您的意見,我想提供什麼,我認爲是處理最好的辦法的一些技巧。

  1. 你不應該在關係數據庫中存儲的序列化數據。相反,你應該規範你的數據,讓你充分利用關係數據庫提供的東西。我不知道你的項目有多深,但如果可能的話,我強烈建議重構。

  2. 如果你必須保持存儲/使用串行數據(強烈反對這一點),我會考慮完全避免轉儲,並使用類似以下內容:在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"); 
    } 
} 
+0

我很欣賞你努力幫助解決這種情況,但我不能使用你的建議。我們使用Drupal,它將序列化的字符串存儲在數據庫中。沒有解決這個問題。我們有一個遷移涉及轉儲文件的網站的流程,但是沒有得到解決。相信我,我已經經歷過這個。我正在尋找的是一個PHP SQL解析器,就像gschwa鏈接到的一樣。我拒絕提供背景信息以避免這樣的正交答案。但我很欣賞它。 – user151841

+0

@ user151841好吧,如果該評論是在這個問題中,我不會寫這個:)也有pear.php.net/SQL_Parser,但我認爲它已知有一些錯誤。 – mfonda

+1

我的問題很簡單,就是要求一個PHP SQL解析器。你給我解決了我的問題,但不是我的問題的答案。一旦人們開始尋求更多背景,我就開始感受到「死鳥」的味道(http://naminghard.blogspot.com/2011/07/programming-metaphors-you-need-part-1.html) 如果您發佈PEAR庫作爲答案,我會upvote :) – user151841