【问题标题】:Insert batch to MySQL with PHP/PDO使用 PHP/PDO 将批处理插入 MySQL
【发布时间】:2020-05-25 07:54:24
【问题描述】:

我有一个批量添加域的表单,这些域可以有一个或多个国家和一个语言属性。

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

添加域:

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

我不知道如何让我的数据(域、国家、语言)适用于此代码。

而且,我需要检查一个域是否已经在数据库中,但前提是该域具有相同的语言。

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

【问题讨论】:

  • 阅读w3schools.com/php/php_forms.asp,提交表单后,操作页面将获取$_POST 或$_GET 数组中输入的值。在操作页面中编写您的业务逻辑。

标签: php html mysql bulkinsert


【解决方案1】:

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

这是我的解决方案,它有效:

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

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2014-11-24
    • 2022-12-17
    • 2015-10-24
    相关资源
    最近更新 更多