2013-07-01 111 views
3

以下主題與我正在嘗試提出的內容很接近,但考慮到現在在php中不推薦使用mysql函數,並且已準備好用於防止sql注入的語句,因此已過時。 insert all $_POST data into mysql using PHP?將所有發佈數據插入到MySQL數據庫中

基本上,我在我的數據庫中有大量的列,當我提交這個表單時,所有列都需要填滿。該表單將每列與同名輸入字段進行匹配(輸入字段上的名稱屬性與其所屬的列名稱相同。因此,$_POST['firstName']進入firstName列,依此類推)。

是否有一種使用mysqli或PDO的方法,我可以輕鬆地將所有POST數據取出並自動將其插入到MySQL表中,而無需手動通過每個字段?我可以使用準備好的語句對它們進行編碼,但是有很多列,如果可能的話,我希望一次完成它們。

這是我真的不想完成的長版本的開始。

$stmt = $connection->prepare("INSERT INTO area_retreat 
(user,firstName,lastName,...etc) 
VALUES 
(?,?,?,...etc) 
ON DUPLICATE KEY UPDATE 
user=VALUES(user), 
firstName=VALUES(firstName), 
lastName=VALUES(lastName), 
...etc 
"); 
$stmt->bind_param("sss", 
    $username, 
    $_POST['firstName'], 
    $_POST['lastName'] 
); 

$stmt->execute(); 

回答

0

爲了避免錯誤,您絕對需要以某種方式存儲變量列表。它可以像一個數組一樣簡單:

$fields = array('firstName', etc.); 

然後你就可以遍歷您的陣列生成SQL語句動態,並使用指定的佔位符,而不是問號,你只需要一次約束力。您還可以在值存儲在數組中,併發送該數組作爲參數傳遞給​​:如果你想使用相同的變量在ON DUPLICATE KEY UPDATE部分

// start of query 
$values = array(); 
$query = '...'; 
foreach ($fields as $field) 
{ 
    if (isset($_POST[$field])) 
    { 
    // add to query 
    $query .= "..."; 
    // add value to array so that you can feed the array to `execute` 
    $values[':' . $field] = $_POST[$field]; 
    } 
} 
// add end of query 
$query .= '...'; 

$stmt->execute($values); 

,你可以做另一個循環或建立插入節循環一次後可以使用兩次。

+1

這實際上是我所尋找的比我所尋找的更多。我想我可以查詢表格並動態獲取字段名稱,而不是將所有字段名稱手動編入'$ fields'數組或者不安全,並將它們從$ _POST'中拉出來,我會得到它們從表本身填充'$ fields'數組。 –

1

INSERT INTO area_retreat VALUES (?, ?, ...) - 但是,你有如圖所示的數據庫匹配ALL列。

如果您有自動增量ID,則需要按正確的列順序爲該列提供NULL。