2014-10-16 90 views
1

我試圖讓用戶(在我工作的地方)運行一個查詢,如果他們選擇,將它保存到數據庫中,以便稍後用一次單擊就可以再次運行它(就像他們正在更新數據庫一樣)。不過,我遇到了問題。簡單地運行查詢不是問題,但查詢不能正確保存。查詢是這樣的:將mysql查詢保存到數據庫中

LOAD DATA INFILE 'path/to/file/file.txt' INTO TABLE table FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'; 

我可以得到它保存到數據庫中正確的,如果我打字查詢時逃離反斜槓,但會要求查詢正確運行提交。我想知道是否有一種方法可以自動逃避反斜槓。或者分離這兩個功能會更容易/更好?如果需要更多信息,請告訴我,並提前致謝。

+0

當再次讀取查詢時,是否可以使用REPLACE - http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace將\\更改爲\? – Giles 2014-10-16 13:45:07

+0

您是否嘗試過使用準備好的語句?在這種情況下,您不需要轉義數據。無論如何,如果你想在添加到數據庫之前逃脫,那麼當你檢索它時只需要使用unescape! – Qualcuno 2014-10-16 13:50:23

+0

您是否嘗試過'mysqli_real_escape_sting()'(或類似)或者如上所示使用準備好的語句來插入記錄(從而避免需要轉義)? – 2014-10-16 13:53:01

回答

0

在使用它之前,您必須先查看查詢。
創建一個專門爲像「myClass->unescapeAndExecute($escapedQueryFromDb);"

1

我做了一些修修補補運行從數據庫查詢方法,並且我得到了它這裏是我想出了一個解決方案:

首先,我在更新中使用str_replace

$q = str_replace(array("\t", "\n"),array("\\t","\\n"), $_POST['update']); 

然後,我製備它作爲建議。

if($stmt = $con->prepare("insert into queries (Query_Name, Query, Description) values (?, ?, ?);")){ 
    $stmt->bind_param('sss', $qn, $q, $qd); 
    $stmt->execute(); 
    $stmt->store_result(); 
    $stmt->close(); 
} 

翅盟友,我跑了mysqli_multi_query(因爲有時存在提交,這導致它失敗了多個查詢)以運行查詢(一個或多個)用戶將英寸

$query = mysqli_multi_query($con, $q); 

謝謝大家誰提出的建議!