2012-07-15 172 views
0

我有一個PHP代碼片斷象下面這樣:如何插入在MySQL數據庫中的PHP代碼片段

function is_ancestor_of($page_name = null, $post) { 

if(is_null($page_name)) 
return false; 

// does it have a parent? 
if (!isset($post->post_parent) OR $post->post_parent <= 0) 
return false; 

//Get parent page 
$parent = wp_get_single_post($post->post_parent); 

if ($parent->post_name == $page_name){ 
echo $parent->post_name.' - '.$page_name; 
return true; 
} else { 
is_ancestor_of($page_name, $parent); 
} 
} 

我只是想插入MySQL數據庫表這整個代碼,並再次與此相同retriew它在頁面上再次格式化。當我使用INSERT INTO查詢簡單地將此代碼插入數據庫時​​,會發生mysql語法錯誤,因爲代碼因特殊字符而中斷了SQL查詢。有沒有辦法做到這一點?

謝謝。

+2

幾個問題:1,使用你準備像PDO中的陳述? 2.你試圖插入的代碼被視爲字符串嗎? 3.什麼是列的數據類型(您試圖插入此代碼片段的位置;應插入文本類型或類似內容)? 4.我不會問你爲什麼要將代碼片段添加到數據庫行。我只是假設這是一個合法的理由,像博客發佈代碼示例:) – Stegrex 2012-07-15 18:23:34

回答

2

是的,你可以做到這一點。多種方式:

  1. PDO - 這實際上是最好的選擇。在PHP手冊中研究這個主題,因爲這比保護PHP中的MySQL查詢免於破壞更有幫助。
  2. addslashes() - 爲轉義字符添加斜槓。這肯定不會破壞你的MySQL查詢。
  3. mysql_real_escape_string()
  4. 函數mysql_escape_string()

EDITED 強調PDO相比以前的版本這個答案爲PDO是遠遠超過其他選項更安全,還有很多東西要它可以在使用PHP和MySQL時使用。

+0

不_not_使用'addslashes'來轉義MySQL查詢的字符串。在這一點上你甚至不應該使用'mysql_real_escape_string'或任何'mysql'模塊函數。使用'mysqli'或'pdo'。但絕對不要使用'addslashes'。 – 2012-07-15 18:34:23

+0

是的,我自己使用PDO,但那些是我開始使用的。但是,的確,PDO應該是實現這一目標的方法。 – vaidik 2012-07-15 18:50:19

3

使用mysql_real_escape_string()轉義特殊字符。例如,你可能會更喜歡遠離mysql_ *函數,並開始使用PDOmysqli_*

編輯 正如在評論中提到的,請確保您將代碼放置爲字符串,並且DB字段是正確的數據類型。此外,請確保在整個字符串(或代碼)上使用mysql_real_escape_string()(如果您堅持使用mysql_ *)。

0

您將需要使用mysql_real_escape_string()來轉義php代碼,以便在插入時不會引發錯誤。然後你在語句上運行一個eval(),如果你想要它執行的話。如果你有一個混合HTML和PHP存儲在數據庫中,你會叫的eval像這樣

eval('?>'.$dbresult.'<?php'); 

只要確保你stripslashes()函數在數據庫結果

+0

Yuck .. eval():( – Bono 2012-07-15 18:35:22

+0

是的,它只是一個獲取代碼從數據庫執行的唯一方法之一 – 2012-07-15 18:35:53

相關問題