从循环中多次插入并检查现有字段
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来查看我的别名字段。
答案
我想在这里问你一个问题,如果你能回答,那么你会自己找到答案:如果出现以下情况会发生什么:
$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。
谢谢你们的帮助!
以上是关于从循环中多次插入并检查现有字段的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围