簡體   English   中英

使用 PHP/PDO 將批處理插入 MySQL

[英]Insert batch to MySQL with PHP/PDO

我有一個批量添加域的表單,這些域可以有一個或多個國家和一個語言屬性。

我的表格(簡化為代碼):

添加域:

<textarea name="bulk" rows="10" class="form-control no-resize"><?php echo $_POST['bulk']; ?></textarea>

選擇一個或多個國家:

<div class="checkbox">
  <?php
  if ($queries->query("SELECT * FROM countrycodes ORDER BY code ASC")) {
    if ($queries->count() > 0) {
      $contents = $queries->fetchAll();
      foreach ($contents as $content) {
  ?>
  <input type="checkbox" id="country_<?php echo $content->code; ?>" name="country[]" value="<?php echo $content->code; ?>" <?php if (in_array($content->code, $_POST['country'])) echo "checked = 'checked'"; ?> />
  <label for="country_<?php echo $content->code; ?>"><?php echo $content->country; ?></label><br />
  <?php }}} ?>
</div>

選擇語言:

<div class="radio">
<?php
if ($queries->query("SELECT * FROM langcodes ORDER BY code ASC")) {
  if ($queries->count() > 0) {
    $contents = $queries->fetchAll();
    foreach ($contents as $content) {
?>
<input type="radio" name="lang" id="lang_<?php echo $content->code; ?>" value="<?php echo $content->code; ?>" <?php if ($content->code == $_POST['lang']) { ?>checked="" <?php } ?> />
<label for="lang_<?php echo $content->code; ?>"><?php echo $content->language; ?></label><br />
<?php }}} ?>
</div>

從提交中獲取數據:

if (isset($_POST['addData'])) {
  $doms = explode("\n", str_replace("\r", "", $_POST['bulk']));
  $coun = implode(", ", $_POST['country']);
  $lang = $_POST['lang'];
}

我發現這個用於批量插入:

$d    = ['Osian', 'Williams', 1];
$data = array_fill(0, 1000, $d);
$db   = new PDO('mysql:host=localhost;dbname=MYDB','MYUSER','MYPASS');
$db->beginTransaction();
$stmt = $db->prepare('INSERT INTO members (firstname, surname, title) VALUES (?,?,?)');
for($i=0;$i<count($data);$i++) {
  $stmt->execute($data[$i]);
}
$db->commit();

我不知道如何讓我的數據(域、國家、語言)適用於此代碼。

而且,我需要檢查域是否已經在數據庫中,但前提是域具有相同的語言。

所以,能得到一些幫助會很好。

我找到了解決方案。 一開始有點困惑,如何將國家和語言添加到域列表中。 但是國家數據和語言數據是靜態的 - 所以我只需要遍歷域。

這是我的解決方案,它有效:

if (isset($_POST['addData'])) {
  $doms = explode("\n", str_replace("\r", "", $_POST['bulk']));
  $coun = implode(", ", $_POST['country']);
  $lang = $_POST['lang'];

  $queries->transStart();
  foreach ($doms as $dom) {
    if ($queries->query("SELECT domain FROM websites WHERE domain = ? AND lang = ?", [$dom, $lang])) {
      if ($queries->count() > 0) {
        $infoBox = "error_duplicate";
      } else {
        $queries->query("INSERT INTO websites (domain, country, lang) VALUES (?,?,?)", [$dom, $coun, $lang]);
        $infoBox = "success";
      }
    }
  }
  $queries->transStop();
}

暫無
暫無

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

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