2013-05-28 25 views
1

我想創建一個日誌記錄表的未來錯誤,將記錄所有$ _POST(s)通過我運行的系統。

我喜歡把我主管與PHP,我想無論是: var_dump($_POST)print_r($_POST)varchar(9000) SQL表會工作。但事實並非如此。 我做的研究車費金額,這是我實際上是想代碼:它不工作

$post_error_logging = "INSERT INTO post (title, post, flname, stamp) VALUES('".$_SERVER["SCRIPT_FILENAME"]."', '".var_dump($_POST)."', '".$_SESSION['username']."', '".date('Y-m-d H:i:s',strtotime('-3 hours'))."')"; 
    mysql_db_query("database", $post_error_logging); 

。請任何幫助將非常感激。

有些事情我已經嘗試:

$this->db->insert_string($_POST) 

無法得到這個正常工作太....

+3

你有沒有聽說過SQL注入? :P – mkk

+3

請不要使用mysql_ *函數,因爲它們已被棄用......謝謝。 –

回答

3

$_POST是一個數組,那麼:

如果KEY S(輸入名字)很重要
您可以使用serialize()將其轉換爲字符串,然後將其存儲到數據庫中。

$post_string = serialize($_POST); 

然後你可以再次將它變成陣列,只需unserialize()

$post_array = unserialize($post_string); 


但如果KEY S(輸入名稱)不重要
您可以使用implode()把它變成字符串,然後將其存儲到數據庫中。

$post_string = implode(",", $_POST); 

然後你可以再次將它變成數組,只需explode()

$post_array = explode(",", $post_string); 
  • 而在你的MySQL使用TEXTLONGTEXT類型,而不是爲varchar(9000)大字符串。
+1

他的所有變量都是由$ _POST來的字符串。爲了節省數據大小,可以使用'json_encode'代替。儘管如此,當你的答案出現時,你會得到滿意的結果。 –

+1

非常感謝您的幫助! –

0

print_r(xxx,true)將允許你來串聯結果作爲一個字符串。

你提到varchar(9000)...我不會認爲這足以存儲輸出。您可能要考慮在數據庫中使用文本字段。

此外,請確保您有一個方法來避免引號,以便不會中斷您的查詢。

+0

...並且不允許恢復那些數據。另外,無論數據有多大,「TEXT」每行都使用一個完整的MySQL頁面,而「VARCHAR」可以設置爲明顯小於此值。 –

+0

我有一段時間沒有使用過mysql。爲什麼你不能從文本字段中檢索數據?如果情況確實如此,在文本字段中存儲任何內容的意義何在? – cocogorilla

+1

您不能將'print_r()'輸出回到它所來自的對象中。這就是爲什麼其他答案更實用的原因。 –