postgresql php中的新旧值

postgresql php中的新旧值,php,sql,postgresql,insert,insert-update,Php,Sql,Postgresql,Insert,Insert Update,我有一个包含大量数据的表格。在这个表中,我想添加新值和更新旧值。因此,我找到了以下方法 在根据响应调整查询之后,我仍然得到一个错误 Fatal error: Uncaught PDOException: SQLSTATE[42702]: Ambiguous column: 7 ERROR: column reference "id" is ambiguous LINE 3: ...richia coli',full_name = 'Escherichia coli' WHERE id = '

我有一个包含大量数据的表格。在这个表中,我想添加新值和更新旧值。因此,我找到了以下方法

在根据响应调整查询之后,我仍然得到一个错误

Fatal error: Uncaught PDOException: SQLSTATE[42702]: Ambiguous column: 7 
ERROR: column reference "id" is ambiguous LINE 3: ...richia coli',full_name = 
'Escherichia coli' WHERE id = '0' ^ in /var/www/html/Insert.php:127 Stack 
trace: #0 /var/www/html/Insert.php(127): PDO->query('INSERT INTO spe...') #1 
{main} thrown in /var/www/html/Insert.php on line 127
修改后的查询是:

$sql = "INSERT INTO species (id,match,full_name)
VALUES ('".$var_id."','".$var_match ."','".$var_full_name."')".
"ON CONFLICT (id) DO UPDATE 
SET match = '".$var_match."',full_name = '".$var_full_name."' ". 
" WHERE id = '".$var_id."' ";
出于某种原因,它似乎仍然无法识别冲突id DO更新集。看图 谁能告诉我是不是我弄错了?提前谢谢

EXCLUDED.$var_match'将变成类似EXCLUDED的内容。“Escherichia coli”和“Escherichia coli”肯定不是列

任用

$sql = "INSERT INTO species (id,match,full_name)
VALUES ('".$var_id."','".$var_match ."','".$var_full_name."')".
"ON CONFLICT (id) DO UPDATE 
SET match = '".$var_match."',full_name = '".$var_full_name."' ";


您可能还缺少更新的WHERE id='.$var_id.'或WHERE id=EXCLUDED.id。

这就是我找到的解决方案。我将查询分为多个部分,因为ON冲突对我不起作用。首先,我使用select通过检查id是否存在来确定行是否已经存在。如果存在id,则更新数据。如果该想法不存在,则添加一个新行

作用 如果结果=>更新行
当我使用上面的函数时,我仍然得到一个错误。致命错误:未捕获PDOException:SQLSTATE[42702]:不明确列:7错误:列引用id不明确第3行:…richia coli',full_name='Escherichia coli',其中id='0'^in/var/www/html//Insert.php:127堆栈跟踪:0/var/www/html//Insert.php127:PDO->query'Insert-INTO…'1{main}在线上抛出/var/www/html/Inser.php127@Nemo:尝试限定id.species.id或excluded.id,无论您实际指的是哪个,我猜是species.id?@Nemo?这些值可能是。但那是另一个故事。在这里,DBMS不知道您指的是species.id还是excluded.id,两者都可以用于id。这就是为什么您需要对其进行限定,以便DBMS知道您指的是哪一个。我试过了,但仍然不起作用。因此,我将查询拆分为,而不是使用on冲突。
$sql = "INSERT INTO species (id,match,full_name)
VALUES ('".$var_id."','".$var_match ."','".$var_full_name."')".
"ON CONFLICT (id) DO UPDATE 
SET match = EXCLUDED.match,full_name = EXCLUDED.full_name ";
function execute_query($query,$dbh){
    if ($dbh->query($query)) {
        return "New Record Inserted Successfully!<br \>\n";
    }else{
        return "Data not successfully Inserted.<br \>\n";
    } 
} 
$query = 'SELECT * FROM species '. 'WHERE id = '. "'".$var_id."'";

$stmt = $dbh->prepare($query);
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$out = $stmt->fetch();
print_r($out) ;
if ($out !== false){
    $sql = "UPDATE species SET id = '".$var_id."', match ='".$var_match."',full_name = '".$var_full_name."'
    WHERE id = '".$var_id."' ";
    echo $sql ."<br \>\n";;
    execute_query($sql,$dbh); # function
    echo "Value is updated";

}else{ ### If no result => insert new values
    $sql = "INSERT INTO species (id,match,full_name)VALUES 
    ('".$var_id."','".$var_match ."','".$var_full_name."')";
    execute_query($sql,$dbh);
    echo "New value is inserted";