postgresql 中的新旧值 php
New and old values in postgresql php
我有一个 table 包含大量数据。在此 table 中,我想添加新值并更新旧值。因此,我找到了下面的方法
根据响应调整查询后,我仍然遇到错误。
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."' ";
出于某种原因,它似乎仍然无法识别 ON CONFLICT (id) DO UPDATE SET。见图
有人能告诉我我弄错了吗?提前致谢。
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."' ";
或
$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 ";
而且您可能还缺少 WHERE id = '".$var_id."'
或 WHERE id = EXCLUDED.id
作为 UPDATE
。
这是我找到的解决方案。我将查询拆分为因为 ON CONFLICT 对我不起作用。首先,我使用 select 通过检查 id 是否存在来确定行是否已经存在。如果存在 id,则数据已更新。如果该想法不存在,则添加一个新行。
函数
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 和准备语句
$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";
我有一个 table 包含大量数据。在此 table 中,我想添加新值并更新旧值。因此,我找到了下面的方法
根据响应调整查询后,我仍然遇到错误。
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."' ";
出于某种原因,它似乎仍然无法识别 ON CONFLICT (id) DO UPDATE SET。见图
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."' ";
或
$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 ";
而且您可能还缺少 WHERE id = '".$var_id."'
或 WHERE id = EXCLUDED.id
作为 UPDATE
。
这是我找到的解决方案。我将查询拆分为因为 ON CONFLICT 对我不起作用。首先,我使用 select 通过检查 id 是否存在来确定行是否已经存在。如果存在 id,则数据已更新。如果该想法不存在,则添加一个新行。
函数
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 和准备语句
$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";