INSERT或REPLACE正在创建重复项

Sam*_*Sam 2 php sqlite

每当我对sqlite3执行"INSERT OR REPLACE"命令时,它实际上是创建重复的条目而不是覆盖现有的条目.

我使用以下命令在sqlite3中创建了表:

CREATE TABLE mytable (a INTEGER PRIMARY KEY, b VARCHAR(50), c BOOLEAN, d BOOLEAN, e INTEGER, f TEXT, g TEXT, h INTEGER, i DATETIME);
Run Code Online (Sandbox Code Playgroud)

然后我正在执行这个:

$database = new POD("sqlite:mydatabase.db");
$database->prepare("INSERT OR REPLACE INTO mytable (b, c, d, e, f, h, h, i) values(?, ?, ?, ?, ?, ?, ?, ?)")
$database->execute('test', 0, 1, -1, 'test', 'test', 12, strtotime('now'));
Run Code Online (Sandbox Code Playgroud)

我能做错什么?谢谢

Dou*_*rie 6

您应该在create语句中指定哪些列应该是"唯一" - 例如

CREATE TABLE mytable (a INTEGER PRIMARY KEY, b VARCHAR(50), c BOOLEAN, d BOOLEAN,
                      e INTEGER, f TEXT, g TEXT, h INTEGER, i DATETIME,
                      UNIQUE (b,c));
Run Code Online (Sandbox Code Playgroud)

现在

sqlite> insert or replace into mytable (b,c,d,e,f,g,h,i) values    ('foo',1,1,2,'bar','baz',3,'2011-07-19');
sqlite> select * from mytable;
2|foo|1|1|2|bar|baz|3|2011-07-19
sqlite> insert or replace into mytable (b,c,d,e,f,g,h,i) values ('foo',1,1,2,'bar','baz',4,'2011-07-19');
sqlite> select * from mytable;
3|foo|1|1|2|bar|baz|4|2011-07-19
sqlite> 
Run Code Online (Sandbox Code Playgroud)