从循环中多次插入并检查现有字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从循环中多次插入并检查现有字段相关的知识,希望对你有一定的参考价值。

我已经阅读了很多论坛帖子,无法解决我的问题。

我正在foreach循环中解析XML文件,然后希望将解析的内容插入数据库表中。

一切正常,但我在数据库中插入时遇到问题。这是使其“可理解”的代码:

// 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";

我的ID字段是UNIQUE和Auto Increment。我想要的是检查别名字段是否已经存在,而不是更新它或创建新行。

我已经检查了ON DUPLICATE KEY UPDATE和REPLACE,但它不符合我的需要,因为它仅对唯一键执行重复检查,或者我的别名字段不是,我无法更改它。

我现在正在测试的最后一件事是在INSERT INTO之前使用WHERE条件创建一个SELECT来查看我的别名字段。

答案

我想在这里问你一个问题,如果你能回答,那么你会自己找到答案:如果出现以下情况会发生什么:

  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()函数。

另一答案

我通过使用另一个连接表来解决它,以便能够在我的别名字段上使用ON DUPLICATE KEY ENTRY。

谢谢你们的帮助!

以上是关于从循环中多次插入并检查现有字段的主要内容,如果未能解决你的问题,请参考以下文章

针对 20,000 多次更新优化 Sqlite3

在插入之前检查现有记录

仅在循环中多次插入最后一个值

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

Android:打开现有 PDF 文件检查并填写复选框字段,然后保存文档的新版本

通过 for 循环和 php 数组进行多次插入(通过 jQuery AJAX 接收)