PHP-如何更新postgresql表中的某些值

PHP-如何更新postgresql表中的某些值,postgresql,php,insert,Postgresql,Php,Insert,如何更新postgresql表中的某些值 我有一个包含很多列的大型数据库,在这个列中有很多值。我只想在值不再是最新的时候更新。但由于尺寸的原因,我无法判断哪一个需要更新。我的代码只是更新了所有的值,但由于数据量大,它需要很长时间。是否有办法指定,以确定哪些值需要更新 我想我可以处理这个主体==>例如,如果列排序中的值被更改,行的其余部分将自动更新。这样,它就不必在每一列中搜索任何更改 $host = "localhost"; $username = "postgres"; $password =

如何更新postgresql表中的某些值

我有一个包含很多列的大型数据库,在这个列中有很多值。我只想在值不再是最新的时候更新。但由于尺寸的原因,我无法判断哪一个需要更新。我的代码只是更新了所有的值,但由于数据量大,它需要很长时间。是否有办法指定,以确定哪些值需要更新

我想我可以处理这个主体==>例如,如果列排序中的值被更改,行的其余部分将自动更新。这样,它就不必在每一列中搜索任何更改

$host = "localhost";
$username = "postgres";
$password = "password";
$dbname = "dbtest";   
$dbh = new PDO("pgsql:dbname=$dbname; host=$host", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if ($dbh->connect_error) {
    die("Connection failed: " . $dbh->connect_error);
}

# Query used to insert data
# $sql = "INSERT INTO test (id,sort,full, lm, gs, sp, gan, pac, gsyn, type, searchterm, inter, pat, go) VALUES ('".$id."','".$name ."','".$full_name."','".$lm ."','".$genesymbol ."','".$specie ."','".$geneacc ."','".$placc ."','".$genesyno ."','".$type ."','".$searchterm ."','".$intera ."','".$path ."','".$geneon ."')";

# Query used to update
UPDATE species SET sort ='".$name ."', full_name='".$full_name."' , lm='".$lm ."', gs='".$genesymbol ."', sp='".$specie ."', gan='".$geneacc ."', pac='".$placc ."', gsyn='".$genesyno ."', type='".$type ."', searchterm='".$searchterm ."', inter='".$intera ."', pat='".$path ."', go='".$geneon ."' WHERE id = '".$id."' ";

    if ($dbh->query($sql) === TRUE) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $dbh->error;
}
$conn->close();

最好的解决方案是编写一个触发器,告诉您coulmn的最后更新值&新值,以便您可以更新
顺便说一句,您的insert和update很容易进行SQL注入,您知道您的数据,并且假设如果任何列发生更改,
排序
列将不同,这是多么安全

如果您是正确的,那么您的
UPDATE
语句应该如下所示(为了可读性增加了换行符):

$sql=“更新物种集排序=”“$name.”,全名=”“$full\u name
“.”,lm=”“$lm.”,gs=”“$genesymbol.”,sp=”“$specie
“,”,gan=”,“$geneacc.”,pac=”,“$placc.”,gsyn=”,“$genesyno
.“,type=”,“$type.”,searchterm=”,“$searchterm.”
.“,inter=”,“$intera.”,pat=”,“$path.”,go=”,“$geneon
“'WHERE id='”“$id.“'AND sort'”.$name.“;

正如其他人所指出的那样,如前所述,如果数据是用户输入的,则语句容易受到SQL注入攻击;将查询参数化会更安全,以避免用户形成输入对系统造成损害的可能性。(示例-如果
$name
'+排序;删除物种;
?)这个问题似乎是关于如何将现有行与新传入数据同步,这是一个没有通用解决方案的常见问题。这取决于新旧数据的结构和含义。例如,如果旧数据包含错误的物种名称,则该行上的其他信息也不正确。那么,是否没有通用的解决方案来更新这些数据呢?关键是要将新旧数据与一个字段相匹配,该字段是唯一的,并且在这两个字段中都存在,这样您就可以将新行与旧行连接起来。它目前没有出现在您的问题中。
$sql = "UPDATE species SET sort ='".$name ."', full_name='".$full_name
      ."' , lm='".$lm ."', gs='".$genesymbol ."', sp='".$specie
      ."', gan='".$geneacc ."', pac='".$placc ."', gsyn='".$genesyno
      ."', type='".$type ."', searchterm='".$searchterm
      ."', inter='".$intera ."', pat='".$path ."', go='".$geneon
      ."' WHERE id = '".$id."' AND sort <> '".$name ."' ";