Сравнение таблицы sql с файлом txt строка за строкой с таблицей, если переменная отсутствует, вставьте ее

<?php
function db_query()
{
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "single4thenight";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, name, alias, type, parent, ordering, published FROM iutca_jomcl_locations";  //selects locations from
$result = $conn->query($sql);

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "  alias" . $row["alias"]. "  type: " . $row["type"]. " - parent: " . $row["parent"]. " ordering " . $row["ordering"]. "published " . $row["published"]."<br>";
}
} else {
echo "0 results";
}
$conn->close();

}
function read_location()
{
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "single4thenight";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT name FROM iutca_jomcl_locations";  //selects locations from
$result = $conn->query($sql);

if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc()) {
//  echo "Location : " . $row["name"]."<br>";
$row_name = $row["name"];
echo $row_name.'<br />';
}

}
$file1 = "./location.txt";
$lines = file($file1);
foreach($lines as $line_num => $line)
{
echo $line;

}

}

Мой файл location.txt содержит это

рыжеватый
Бирмингем
Dothan
Gadsden
Хантсвилле
мобильный
Montgomery
Мышечные косяки
Таскалуза

Я хотел бы сравнить мою базу данных sql с txt файлом, чтобы убедиться, что у меня нет переменных внутри. Я не хочу ставить дубликаты в стороне моего sql, я хотел бы знать, какой самый простой способ обновить мой sql

0

Решение

Вы могли бы использовать INSERT IGNORE INTO вместо просто INSERT INTO и MySQL будет игнорировать дубликаты записей. Увидеть Документация MySQL для INSERT для дополнительной информации. Итак, исходя из того, что я вижу в вашем вопросе, ваш SQL будет выглядеть примерно так:

INSERT IGNORE INTO iutca_jomcl_locations ('name') values (?)

Надеюсь это поможет! 🙂

1

Другие решения

Сначала мы читаем содержимое файла в $content переменная

$content = file('mytxt.txt')

После публикации ваш файл содержит слова, разделенные пробелом (если нет, пропустите это и сделайте переменную $ words содержать нужные значения), поэтому нам нужно разделить контент, чтобы каждое слово получалось как элемент массива

$words = explode(" ", $content);

И, наконец, вставка значения и проверка, существует ли такой в ​​базе данных

foreach($words as $word)
{
$sql = "INSERT  iutca_jomcl_locations (name)
SELECT  $word
WHERE   NOT EXISTS
(   SELECT  1
FROM    tblSoftwareTitles
WHERE   name = $word
);"$result = $conn->query($sql);
}

iutca_jomcl_locations — имя таблицы
name — столбец для вставки (также проверка уникальных значений с использованием этого столбца)

1

Я использовал этот код, и он работал на меня

 foreach($lines as $line_num => $line)
{
$line = $line;
//echo $line;
$sql = "SELECT ordering, name FROM iutca_jomcl_locations WHERE name='$line'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
//echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
echo "Found Locations: " . $row["name"]." The ordering Number Is " . $row["ordering"]."<br>";
$ordering =$row["ordering"];
}
} else {

if($ordering >=0)
{
$count = $ordering;
//echo "0 results";
$lowerCase = strtolower($line);
$sql = "INSERT INTO iutca_jomcl_locations (name, alias , parent, published,ordering)
VALUES ('$line','$lowerCase','$parent','1','$count')";


$count = $count + 1;
if ($conn->query($sql) === TRUE) {
echo "New record created successfully <br />";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}

}
0
По вопросам рекламы [email protected]