php - 检查数组中的所有值是否都存在于数据库列中
问题描述
我有一系列电子邮件,我想通过验证我的数据库来检查所有这些电子邮件是否有效。我想将无效的电子邮件(如果有)添加到一个空数组中。我对 MySQL 不太熟悉,所以我需要一些帮助。这是我目前在我的 PHP 文件中的内容:
<?php
$conn = mysqli_connect($servername, $username, $password, $db);
$conn->select_db($db);
if($conn->connect_error) {
die("Connection failed " . $conn->connect_error);
}
echo "Connected successfully\n";
$tags = preg_split("/\,/", $_POST['tags']);
$invalidEmails = array();
$count = 0;
$result = $conn->query("SELECT mail FROM dej_colleagues");
for ($i = 0; $i < sizeof($tags); $i++) {
$trim_brackets = trim($tags[$i], '[]');
$trim_quotes = trim($trim_brackets, '"');
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
if ($trim_quotes == $row["mail"]) {
$count += 1;
}
else {
array_push($invalidEmails, $tags[i]);
}
}
}
if (sizeof($tags) == $count) {
echo "good";
}
?>
我的数据库连接成功,但即使我的标签数组中的电子邮件存在于数据库中,它也没有检测到它。此外,数据库列有 100k 个条目,所以如果您知道更有效的方法,请告诉我。
解决方案
建立一个语句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);
推荐阅读
- r - 在 R 中重新组织数据框
- java - 如何在 JAVA 中将字符串变量转换回字节 []
- jquery - Ajax 发布到 Laravel API 访问错误
- python - 将元组转换为机器学习研究中特征的字符串
- linux - Oracle Pro*C 12.1 - 生成核心转储时标准输出内容未重定向到文件
- np-hard - 一个不可判定的问题是否等同于说它是 NP 难的?
- java - 尝试将选定的日期和时间从日期选择器/时间选择器插入 SQLite
- swift - 符合返回 PAT 的通用协议方法
- javascript - 如何在 Cypress 中测试下拉列表(选择)框中的所有选项?
- opengl - 我的 Opengl 三角形有意想不到的顶点颜色