2013-02-19 155 views
2

所以我有一個從網頁中抓取純文本數據字符串(使用簡單的HTML DOM解析器類)創建的變量數組。該變量的格式使其更加簡潔和有用。如何將PHP變量數組發送到MySQL數據庫?

我現在希望將這些數據導出到一個MySQL表中,其中表名是網頁標題(分開刮取),數據輸入是一個數組,其中從網頁中提取的每個單詞都是單獨的數據記錄。

這裏是我的代碼(其中$修剪是從用戶輸入的網頁刮數據格式的變量字符串):

$trimmed->plaintext=trim($trimmed->plaintext); 
$array = (explode(" ", $trimmed->plaintext)); 
$printarray = print_r ($array); 

mysql_select_db("test", $connect) or die ('Could not find database.'); 
$sql = "CREATE TABLE '$title'"; 

$myquery = sprintf("INSERT INTO WebPage '%s' 
    VALUES '%s'", 
    mysql_real_escape_string($title->plaintext), 
    mysql_real_escape_string($printarray)); 
$result = mysql_query($myquery); 

if (!$result) { 
    $message = '<br /><br /><br /> Invalid query: ' . mysql_error() . "\n"; 
    $message .= '<br /><br /> Whole query entered here: ' . $myquery; 
    die($message); 
} 

的錯誤是收到嘗試這是當:
查詢無效:你有你的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以在第1行''示例域'VALUES'1'附近使用

此處輸入的整個查詢:INSERT INTO WebPage'示例域'VALUES'1'

如果需要,我可以提供更多的代碼,如果我沒有很好地解釋這一點,可以提前抱歉;我對此很新。

在此先感謝。

+0

您能否提供表格'WebPage'的結構? – 2013-02-19 13:54:59

+2

請注意,您應該切換到PDO或mysqli,因爲標準的PHP mysql_函數現在已被棄用。 – RayViljoen 2013-02-19 13:57:27

+0

什麼是'Example Domain'? – Shoe 2013-02-19 13:58:04

回答

1

你的SQL:

INSERT INTO WebPage 'Example Domain' VALUES '1' 

無效。也許你的意思是:

INSERT INTO `WebPage` ('Example Domain') VALUES ('1') 

在一個側面說明,如果Example Domain確實是一個列名:你應該避免在外地的名字空間。

0

這裏有很多錯誤。

首先,你產生的插入SQL看起來不正確:

INSERT INTO tableName (fields) VALUES (values) 

您的代碼表示:

INSERT INTO WebPage 'plainText' VALUES (array) 

您應該刪除頁面,如果你想創建一個名爲像表網頁標題。另外,它必須是單個單詞(用'_'之類的東西替換空的空格)。

其次,您需要創建表格。在插入之前,您需要適當的CREATE TABLE結構。

第三,你的echo print_r不能用於插入每個字段(列)的值。您需要迭代數組,併爲每個鍵插入一個值。但是你應該已經完成​​了創建表格列的工作。

0

看起來好像您正試圖將print_r的輸出合併到您的查詢中。這是不可能的,因爲print_r是一個從數組向頁面輸出數據的函數。

爲了在數據庫中存儲數組的內容,您可以使用json_encode將數組轉換爲字符串。然後在檢索時使用json_decode,然後將其改回到php數組中。

E.g.

$myquery = sprintf("INSERT INTO `WebPage` ('%s') 
VALUES ('%s')", 
json_encode($title->plaintext), 
json_encode($array)); //not $printarray as that is not an actual array 

編輯:正如其他人指出,mysql_real_escape_string是一個過時的功能,以便其他方法,應使用轉義符。

edit2:serialize也可以用來代替json_encode,雖然我不確定相對的優點/缺點。更理想的方法是重構數據庫表,以將數組的所有內容作爲單獨的數據部分容納,儘管這可能不實際。