我已经阅读了很多论坛帖子,无法解决我的问题。
我正在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来查看我的别名字段。
答案 0 :(得分:0)
我想在这里问你一个问题,如果你能回答,那么你自己就可以找到答案:如果出现以下情况:
$article_title
或$article_alias
包含,嗯,让我们说"YMas's lazy programming skills"
之类的内容?让我帮助你 - 一个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。
感谢那些帮助!