使用PHP / PDO向MySQL插入批处理

问题描述 投票:1回答:1

我有一个用于批量添加域的表格,这些域可以具有一个或多个国家/地区和一种语言属性。

我的表单(简化为代码):

添加域:

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

我不知道如何使我的数据(域,国家/地区和语言)适用于此代码。

而且,我需要检查数据库中是否已经有一个域,但是仅当该域具有相同的语言时才能检查。

所以,很高兴获得一些帮助。

php html mysql bulkinsert
1个回答
0
投票

我找到了解决方案。一开始有点困惑,如何将国家和语言添加到域列表中。但是国家/地区数据和lang数据是静态的-因此,我只需要遍历域。

这是我的解决方案,它可以正常工作:

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.