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

问题描述 投票:-2回答:2

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

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

php mysqli
2个回答
0
投票

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

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


-2
投票

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

谢谢你们的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.