Вставить пакет в MySQL с 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("
", str_replace("
", "", $_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();

Я понятия не имею, как заставить мои данные (домены, страны, язык) работать для этого кода.

И мне нужно проверить, есть ли домен уже в БД, но только, если домен имеет тот же язык.

Итак, было бы неплохо получить помощь.

Всего 1 ответ


Я нашел решение. Сначала немного запутался, как добавить страну и язык в список доменов. Но данные по стране и lang статические, поэтому мне просто нужно пройтись по доменам.

Это мое решение, и оно работает:

if (isset($_POST['addData'])) {
  $doms = explode("
", str_replace("
", "", $_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();
}

Есть идеи?

10000