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

时间:2017-09-12 14:49:24

标签: php mysqli

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

我正在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来查看我的别名字段。

2 个答案:

答案 0 :(得分:0)

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

  1. $article_title$article_alias包含,嗯,让我们说"YMas's lazy programming skills"之类的内容?
  2. 让我帮助你 - 一个SQL语法错误,因为在这一行:

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

    你没有正确地转义变量。 Bingo,MySQL插入失败。

    规则1:始终在INSERT/UPDATE/DELETE之前始终正确处理输入数据 - 即使用PDO和预备语句(最佳),或者使用旧的-flawed mysqli_real_escape_string()函数。

答案 1 :(得分:-2)

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

感谢那些帮助!