Mysql
 sql >> база данни >  >> RDS >> Mysql

Проверете дали всички стойности в масива съществуват в колона на база данни

Би било по-ефективно да се изгради изявление с WHERE IN за да получите съвпадащите имейли и след това сравнете получените масиви. Можете да използвате array_diff() за да получите разликата на масивите.

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = mysqli_connect($servername, $username, $password, $db);

echo "Connected successfully\n";

$tags = preg_split("/\,/", $_POST['tags']);
$invalidEmails = array();
$count = 0;

// modify your array how you want it
foreach ($tags as $i => $tag) {
    $trim_brackets = trim($tag, '[]');
    $trim_quotes = trim($trim_brackets, '"');
    $tags[$i] = $trim_quotes;
}

// build placeholders for WHERE IN
$in = str_repeat('?,', count($tags) - 1) . '?';
// prepare query
$stmt = $conn->prepare("SELECT mail FROM dej_colleagues WHERE mail IN ($in)");
// bind an array of values. First params is a type list.
$stmt->bind_param(str_repeat('s', count($tags)), ...$tags);
$stmt->execute();
$results = $stmt->get_result();
// fetch the matching mails into an array
$mails = [];
foreach ($results as $row) {
    $mails[] = $row['mail'];
}

// get the difference between the two arrays
$invalidEmails = array_diff($tags, $mails);

if (count($tags) === count($mails)) {
    echo "good";
}

var_dump($invalidEmails);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. промяна на формата на датата по подразбиране laravel sql заявка

  2. MySQLi - деклариране на променлива след bind_param?

  3. Външен ключ за множество таблици и колони?

  4. Еквивалент на колона MSSQL IDENTITY в MySQL

  5. Как да извадя с помощта на SQL в MYSQL между две стойности за дата и час и да извлека резултата за минути или секунди?