簡體   English   中英

將所有發布數據插入MySQL數據庫

[英]Insert All Post Data into MySQL Database

以下主題與我想要提出的內容很接近,但考慮到現在在PHP中不推薦使用mysql函數並且有預防sql注入的預備語句,它已經過時了。 使用PHP將所有$ _POST數據插入mysql?

基本上,我的數據庫中有大量的列,當我提交此表單時,所有列都需要填寫。 表單與每個列匹配一個相同名稱的輸入字段(輸入字段上的name屬性與它所屬的列名相同。所以$_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();

INSERT INTO area_retreat VALUES (?, ?, ...) - 但是,您必須匹配數據庫中顯示的所有列。

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

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

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

然后,您可以循環遍歷數組以動態生成sql語句,並使用命名占位符而不是問號,您只需將它們綁定一次。 您還可以將值存儲在數組中,並將該數組作為參數發送到execute()

// 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);

如果要在ON DUPLICATE KEY UPDATE部分中使用相同的變量,可以執行另一個循環或構建一個插入部分,循環一次后可以使用兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM