【问题标题】:SQLite not inserting into table in PHPSQLite没有插入到PHP中的表中
【发布时间】:2021-07-08 03:13:48
【问题描述】:

我正在使用以下代码:

$db = new SQLite3('test.db');

$db->exec("CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY, the_id TEXT UNIQUE, type TEXT)");

$db->exec("INSERT INTO items(the_id) VALUES ('abc')");
$db->exec("UPDATE items SET type = 'One' WHERE the_id = 'abc'");

$final = $db->query("SELECT * FROM items");

print_r($final->fetchArray(SQLITE3_ASSOC));

但是,我一直收到SQLite3::exec(): UNIQUE constraint failed:$db->exec("INSERT INTO items(the_id) VALUES ('abc')");

如何在表格中插入新行?

如果表为空,脚本将运行良好并添加新行。

如果表包含 1 条记录,它将运行而不会出错,但不会添加新行 ,即使 the_id 是唯一的。

如果表包含 1 条记录并且我再次运行它,它将运行 上面提到的错误。

如何在此表中添加新行?

编辑

为了确认,我添加了不同的 the_id 值,并且由于某种原因,当值是唯一的时,它只允许表中的最大值为 1

【问题讨论】:

  • 似乎该行已添加,因此当您再次运行时会收到错误消息。仔细检查表格。 “UNIQUE 约束失败”错误意味着表中有一行在唯一列中具有相同的值。

标签: php sql database sqlite


【解决方案1】:

您似乎有第二个字段必须是唯一的:“id”,它也是主键。 要么在每次新插入时强制该值(并且必须是唯一的),要么在表中将其设置为自动增量,并由 dB 以自动顺序生成

我建议第二种:在table create语句的id字段后面加一个AUTOINCREMENT关键字

【讨论】:

  • 喜欢这个? $db->exec("CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY AUTOINCREMENT,the_id TEXT, type TEXT)");。不幸的是,仍然不起作用,最多只能允许 1 条记录。另外,我认为ID自动递增,没有属性
  • 您在重新创建之前删除了表吗?您的语句有一个“如果不存在”子句:因此它将尝试创建,但如果您之前没有删除它,则停止。所以改变不适用。
  • 顺便说一句:如果您每次运行整个脚本,它将尝试在每次运行时重新创建表。通常最好一劳永逸地创建表,然后在需要时才更改(即使您输入“如果不存在”,dB 也会尝试运行该语句浪费时间”)。
猜你喜欢
  • 2013-02-23
  • 1970-01-01
  • 2012-12-01
  • 2014-12-02
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多