Многократная вставка в цикл from с проверкой существующего поля

Я прочитал много тем на форуме и не смог решить мою проблему.

Я анализирую XML-файл в цикле foreach, а затем хочу, чтобы проанализированный контент был вставлен в таблицу базы данных.

Все работает нормально, но у меня проблема при вставке в базу данных.
Вот код, чтобы сделать его «понятным»:

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

foreach ($articles->article as $article) {
$article_title = $article->title;
$article_alias = $article->alias;
...
$all_articles .= "('DEFAULT','$article_title','$article_alias'),";
}

$all_articles = rtrim($all_articles, ',');

$query = "INSERT INTO my_table (id,title, alias,) VALUES $all_articles";

Мое поле идентификатора — УНИКАЛЬНОЕ и Автоинкремент.
Я хочу проверить, существует ли поле псевдонима, затем обновить его или создать новую строку.

Я уже проверил ON DUPLICATE KEY UPDATE и REPLACE, но он не соответствует моим потребностям, так как он выполняет повторную проверку только для уникальных ключей, или мое поле псевдонима не подходит, и я не могу его изменить.

Последнее, что я сейчас тестирую, — это сделать SELECT перед INSERT INTO с условием WHERE, чтобы посмотреть на мое поле псевдонимов.

-2

Решение

Я хочу задать вам вопрос здесь, и, если вы сможете ответить на него, вы сами найдете ответ на свой вопрос: что произойдет, если:

  1. $article_title или же $article_alias содержат, хм, скажем, что-то вроде "YMas's lazy programming skills"?

Позвольте мне помочь вам — ошибка синтаксиса SQL, потому что в этой строке:

 $all_articles .= "('DEFAULT','$article_title','$article_alias'),";

вы неправильно экранируете переменные. Бинго, вставка MySQL не удалась.

Правило № 1: ВСЕГДА, всегда правильно обрабатывайте свои входные данные, прежде чем INSERT/UPDATE/DELETE — то есть с помощью PDO и подготовленные заявления (лучшие), или старомодные mysqli_real_escape_string() функция.

0

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

Я решил это с помощью другой объединенной таблицы, чтобы иметь возможность использовать ON DUPLICTAE KEY ENTRY в моем поле псевдонима.

Спасибо за то, как помогли!

-2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector