【问题标题】:How to INSERT 1 row into POSTGRES_DB without unique constraint violation如何在不违反唯一约束的情况下将 1 行插入 POSTGRES_DB
【发布时间】:2014-05-21 08:16:26
【问题描述】:

我正在尝试使用 php 为 postgres 数据库将“INSERT”写入网页。这是从用 PHP 编写的注册表单中输入一些数据。目前我在 PHP 中有这段代码:

function insert($table, $data)
{
global $db;
    if ($table and is_array($data) and !empty($data)) 
    {
        $columns = implode(',',array_keys($data));
        $values = implode(',', escape($data));
        $sql = "INSERT INTO {$table} ($columns) VALUES ($values)";
        $q = pg_query($db, $sql) or db_error_out();
        $result = pg_query($db, $sql) or db_error_out();
        $insert_row = pg_fetch_row($result);
        $id = $insert_row[0];
        return ($id > 0) ? $id : FALSE;
    } else {
        return FALSE;
    }

}

代码有效并且正在将该行插入到 postgres 数据库中,但我也收到此错误:

Warning: pg_query(): Query failed: ERROR: duplicate key value violates unique constraint "index_clients_on_first_name_and_last_name_and_phone_and_email" 
DETAIL: Key (first_name, last_name, phone, email)=(test, test, 5461230, test@mail.com) already exists. in C:\xampp\htdocs\webpage_dev\system\database.php on line 165

第 165 行是 $result,我知道 $db 工作正常,所以我假设 $sql 有问题。

我的问题是如何摆脱这个错误并帮助插入。

【问题讨论】:

  • 在 MySQL 上,有 INSERT ... ON DUPLICATE KEY UPDATE,但在 Postgre 中你遇到了问题。也许this 会有所帮助

标签: php sql postgresql constraints unique-constraint


【解决方案1】:

您正在执行两次查询:

...
$q = pg_query($db, $sql) or db_error_out();
$result = pg_query($db, $sql) or db_error_out();
...

$q 成功,然后 $result 失败,因为数据已经在数据库中。

【讨论】:

  • 只记得我不使用 $q 并且我删除了该行,但仍然得到相同的错误。
  • 否则代码看起来没问题,所以最合理的解释是您尝试插入的数据已经在数据库中。你确定你插入了唯一的名字吗?尝试使用一些随机字符串。如果失败,问题可能出在代码的其他地方。
  • 当我检查数据库时,插入的行就在那里。我尝试了不同的字符串,就像你说的那样,我尝试的所有测试行都像它应该的那样最终出现在数据库中,但我仍然得到重复的错误。有什么不同的想法或建议吗?
  • 嗯...,不知道。错误必须来自其他地方。 db_error_out() 有什么作用?那不是 PHP 函数吧?
  • db_error_out 是另一个函数,只是显示错误 sql 的 AKA 的回溯,只是一个更好的错误显示函数,此时无关紧要。问题是在我遇到问题的 postgresql 中编写功能 INSERT。
猜你喜欢
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 2016-09-06
  • 2014-10-19
  • 2021-06-28
  • 2012-05-03
  • 1970-01-01
  • 2020-04-01
相关资源
最近更新 更多