2014-05-11 41 views
0

我一直在努力將文本文件中的字符串插入到MySQL數據庫中。但是在這些字符串中可能會有隨機轉義字符,會影響BaSH或MySQL。最初我試圖將整個文字文件傳給MySQL,並在那裏處理它。不過,現在我認爲最好是削減數據,並在BaSH中處理這些數據。如何避免MySQL/BaSH中的特殊/轉義字符

我正在運行一切腳本文件,並不是最好的BaSH,我實際上主要使用MySQL或其他語言如C#或Java。

我知道你可以將其他語言嵌入到BaSH腳本中,但是最後我仍然需要將字符串傳遞給MySQL來插入,並且我需要保留文本文件的原始值。

那麼,有沒有辦法讓這些字符串與MySQL的語言只是忽略字符串中的字符,所以它會保留它,而不會造成問題?

#!/bin/bash 
cd /srv/mysql_PROJ/DB_scripts 
echo "" 
for dir in `cat ../pathlist.txt`; do 
    for file in `/bin/ls -1 ${dir}/*.txt`; do 
echo "Processing: dir(${dir})/file(${file}); `cat ${file} | wc`" 
    mysql -u rpm -p'password' --show-warnings --max_allowed_packet=16M call rpmdb.DataButcher(_utf8'`cat ${file}`'); 

    echo "Data inserted for: `cat ${dir}`" 
    echo "" 
done 
done 
echo "Data parse and insert: Done." 

這是我之前的代碼,我有一個更復雜的MySQL程序處理它。從我可以告訴它會碰到一個字符,並只傳遞部分文本到MySQL,然後在MySQL中引起問題,文本文件中的以下行嘗試作爲BaSH運行,顯然它們不是BaSH命令。希望這會有所幫助,這是一個我不斷回來的較舊的項目,最後我看着它,我被困住了。用一種新的思維,我試圖以不同的方式來對待它。

注意:在MySQL的過程被稱爲「DataButcher」

+0

只有文字?給你一些代碼,這樣我們就可以把手弄髒! – PradyJord

+0

無關:BaSH或BASh? – Rudie

回答

1
  1. 最好不要使用bash和命令行客戶端使用 腳本語言,像與MySQL庫的Perl。在那裏你可以使用 佔位符?而不是字符串值,並在SQL之外單獨傳遞參數 。

  2. 必要時你可以使用MySQL UNHEX功能

    INSERT INTO了foo(bar)VALUES(UNHEX( 「536166652066726f6d2053514c20696e6a656374696f6e2027」));