在插入sql查询之前检查元组数据 - php

时间:2015-04-16 12:39:14

标签: php mysql sql

我正在尝试在输入新数据和避免参与者之前检查数据库表中的数据。

  $sqlQuery = "INSERT INTO " . $table . " ( " . $columns . ") VALUES( '" . $columnData . "') 
                        SELECT " . $columnData .  " FROM " . $columns . " 
                        WHERE NOT EXISTS (SELECT '" .$columnData . "' 
                        FROM " . $table . " WHERE '" . $columnData . "' = '" . $columnData . "')";

虽然查询没有按预期执行,但查询不会抛出任何错误。

提前致谢

3 个答案:

答案 0 :(得分:1)

要避免重复输入,请使用INSERT IGNORE

如果要在重复使用Insert ... ON DUPLICATE KEY UPDATE...

时进行更新

答案 1 :(得分:1)

我给你的所有条件的例子请检查

第一步是在表格上设置唯一键:

ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);

然后你必须决定在复制时你想做什么。你应该:

忽略它?

INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
Overwrite the previously entered record?

INSERT INTO thetable (pageid, name, somefield)
VALUES (1, "foo", "first")
ON DUPLICATE KEY UPDATE (somefield = 'first')


INSERT INTO thetable (pageid, name, somefield)
VALUES (1, "foo", "second")
ON DUPLICATE KEY UPDATE (somefield = 'second')
Update some counter?

INSERT INTO thetable (pageid, name)
VALUES (1, "foo"), (1, "foo")
ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)

答案 2 :(得分:1)

如果您想避免重复,请在您想要唯一的列上创建唯一约束或索引:

create unique index idx_table_cols on table(col1, col2, . . .);

然后数据库将防止重复。如果您希望insert以静默方式失败而不是生成错误,可以使用insert ignore,但我建议insert on duplicate key update

insert into table(col1, col2, . . .)
    select <values>
    from . . .
    on duplicate key update col1 = values(col1);