Php 如何在不违反唯一约束的情况下将1行插入POSTGRES_DB

Php 如何在不违反唯一约束的情况下将1行插入POSTGRES_DB,php,sql,postgresql,constraints,unique-constraint,Php,Sql,Postgresql,Constraints,Unique Constraint,我正在尝试使用PHP为postgres数据库向网页中写入“插入”。这是从用PHP编写的注册表中输入一些数据。目前我在PHP中有以下代码: function insert($table, $data) { global $db; if ($table and is_array($data) and !empty($data)) { $columns = implode(',',array_keys($data)); $values = implod

我正在尝试使用PHP为postgres数据库向网页中写入“插入”。这是从用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 DB中,但我也遇到了以下错误:

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有故障


我的问题是如何消除此错误并帮助插入。

您将执行两次查询:

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

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

在MySQL上,有
INSERT。。。在重复密钥更新时
,但在Postgre中您遇到了问题。也许你会记得我没有使用$q,我删除了行,但仍然得到了相同的错误。否则代码看起来没问题,所以最合理的解释是你试图插入的数据已经在数据库中了。您确定要插入唯一的名称吗?尝试使用一些随机字符串。如果失败,问题可能出在代码的其他地方。当我检查数据库时,插入的行就在那里。我试过使用不同的字符串,就像你说的,我试过的所有测试行都会像应该的那样在数据库中结束,但是我仍然得到重复的错误。有什么不同的想法或建议吗?嗯…,不知道。错误一定来自其他地方。db_error_out()的作用是什么?这不是一个PHP函数,对吗?db_error_out是另一个函数,它只是显示错误sql的回溯,也就是更好的错误,它显示的函数在这一点上并不重要。问题是在postgresql中编写一个我有问题的函数插入。