首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >postgresql php中的新值和旧值

postgresql php中的新值和旧值
EN

Stack Overflow用户
提问于 2018-05-28 17:37:07
回答 2查看 118关注 0票数 0

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

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

代码语言:javascript
复制
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

调整后的查询为:

代码语言:javascript
复制
$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 UPDATE SET。参看图片

有没有人能告诉我我是不是搞错了?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-30 21:31:16

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

函数

代码语言:javascript
复制
function execute_query($query,$dbh){
    if ($dbh->query($query)) {
        return "New Record Inserted Successfully!<br \>\n";
    }else{
        return "Data not successfully Inserted.<br \>\n";
    } 
} 

Select和prepare语句

代码语言:javascript
复制
$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 result =>更新行

代码语言:javascript
复制
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";
票数 0
EN

Stack Overflow用户

发布于 2018-05-28 18:45:05

EXCLUDED.'".$var_match."'将变成像EXCLUDED.'Escherichia coli''Escherichia coli'这样的东西,它肯定不是列。

要么使用

代码语言:javascript
复制
$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."' ";

代码语言:javascript
复制
$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 ";

您可能还遗漏了UPDATEWHERE id = '".$var_id."'WHERE id = EXCLUDED.id

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50563304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档