создать уникальный список писем в базе данных - PullRequest
0 голосов
/ 27 мая 2020

У меня есть код PHP для вставки массива писем в базу данных.

Вот код:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";

$myEmails= array("Volvo@example.com", "BMW@example.com", "Toyota@example.com");

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


  foreach($myEmails as $email){

      $sql = "INSERT INTO MyGuests (emails)
      VALUES ('$email')";

      // use exec() because no results are returned
      $conn->exec($sql);
      echo "New record created successfully.!.";

  }


} catch(PDOException $e) {
  echo $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>

Все в порядке! А что, если мы хотим вставить в таблицу только электронные письма, которых еще нет в таблице.

Я имею в виду, что хочу вставить электронное письмо в таблицу, только если его там нет ...

Примечание: Цель состоит в том, чтобы иметь уникальный список электронных писем в таблице ... так что, возможно, есть решение для удаления повторяющихся писем в SQL также ... Я не не знаю!

Я новичок в PHP. любые идеи и предложения будут очень признательны.

1 Ответ

1 голос
/ 27 мая 2020

Определите УНИКАЛЬНЫЙ КЛЮЧ в столбце email (если это еще не сделано):

ALTER TABLE MyGuests ADD UNIQUE KEY (email);

Затем используйте синтаксис INSERT IGNORE, чтобы игнорировать все повторяющиеся вставки. Вы также должны использовать подготовленный оператор в транзакции, чтобы улучшить как производительность, так и безопасность:

$stmt = $conn->prepare("INSERT IGNORE INTO MyGuests (emails) VALUES (?)");

$conn->beginTransaction();

foreach($myEmails as $email){
    $stmt->execute([$email])
}

$conn->commit();

Вы также можете удалить дубликаты в PHP с помощью array_unique () :

$myEmails = array_unique($myEmails);

Однако это не помешает вставке писем, которые уже находятся в таблице БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...