如何在没有唯一约束违规的情况下将1行插入POSTGRES_DB

问题描述 投票:0回答:1

我正在尝试使用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 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, [email protected]) already exists. in C:\xampp\htdocs\webpage_dev\system\database.php on line 165

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

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

php sql postgresql constraints unique-constraint
1个回答
1
投票

您正在执行两次查询:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.