0

我已经正确创建了sql数据库和表,

但是,当我尝试使用 while 循环在 php 中打印值时,我注意到我打印了重复的值。一开始我以为是while循环。然后我注意到每次运行 php 代码时,每次运行代码时都会打印出更多的重复项。我不想重复。

以下是我为表格编写代码的方式:

$sql = "CREATE TABLE IF NOT EXISTS alarms (
    alarmID INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (alarmID),
    Title CHAR(30),
    Description TEXT,
    DT DATETIME
    )";

这是我插入值的方式:

mysqli_query ($con, "INSERT INTO alarms(Title, Description, DT)
VALUES('eat', 'Agha loves eating', '2013-08-05 00:15:12')");

这是我打印出值的while循环:

$result = mysqli_query($con,"SELECT * FROM alarms");
while ($row = mysqli_fetch_array($result)){
echo $row['alarmID'] . " <br> " . $row['Title'] . " <br> " . $row['Description'] . " <br> " . $row['DT'];
}

如何在防止重复的同时插入值?

4

3 回答 3

1

我假设插入值的代码与打印它们的代码一起?这意味着每次刷新时您的插入代码都会运行,再次插入值。除非必要,否则您不应运行插入代码。

但是,为了防止插入数据时出现重复,您要么需要在再次插入值之前进行检查,要么需要修改查询以防止重复。阅读这些,它们会有所帮助。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html <- 如果记录已经存在,如何编写将插入新记录并回退到更新的查询。

http://dev.mysql.com/doc/refman/5.0/en/replace.html <- 相似的结果,不同的方法。

这些方法要求您将主键设置为唯一的,并且主键的组件是插入查询的一部分。如果这是不可能的,并且您的主键是单独的(例如自动增量),那么您唯一的选择是在再次创建之前检查条目。

于 2013-08-17T06:08:37.767 回答
0

如果您只想忽略重复,则设置唯一键约束和主键,然后使用INSERT IGNORElike

mysqli_query ($con, "INSERT IGNORE INTO alarms(Title, Description, DT)
    VALUES('eat', 'Agha loves eating', '2013-08-05 00:15:12')");
于 2013-08-17T06:12:13.153 回答
0

我认为您的问题是-对于单个mysql_inser()两条记录插入到您的数据库中。当页面未正确重新加载时会发生此问题。因此,在插入警报详细信息后,请正确重定向您的页面,以便没有发布数据和插入请求。

于 2013-08-17T06:13:39.660 回答