Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
覆盖postgresql表php中的数据_Php_Postgresql_Pdo_Insert_Insert Update - Fatal编程技术网

覆盖postgresql表php中的数据

覆盖postgresql表php中的数据,php,postgresql,pdo,insert,insert-update,Php,Postgresql,Pdo,Insert,Insert Update,postgresql表中的数据不再更新。我想覆盖数据。当我只使用insert into时,会添加新数据,但保留旧数据。我试图使用更新,但随后出现错误。我想更新所有记录。我想可能是语法问题。但我找不到问题所在 代码 $dbname=“dbtest”; $host=“localhost”; $username=“postgres”; $password=“pasword”; $dbh=newpdo(“pgsql:dbname=$dbname;host=$host”,$username,$passwo

postgresql表中的数据不再更新。我想覆盖数据。当我只使用insert into时,会添加新数据,但保留旧数据。我试图使用更新,但随后出现错误。我想更新所有记录。我想可能是语法问题。但我找不到问题所在

代码
$dbname=“dbtest”;
$host=“localhost”;
$username=“postgres”;
$password=“pasword”;
$dbh=newpdo(“pgsql:dbname=$dbname;host=$host”,$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$c=数组(“人”、“鼠”、“鼠”、“仓鼠”、“SV40”);
$b=阵列(“人HBO基因”、“小鼠BB基因”、“人CCB基因”、“SV40 TP基因”、“仓鼠TP53基因”);
$count=0;
foreach($c作为$key=>$d){
$e=$b[$key];
$name=$count++;
if(strpos($e,$d)!==FALSE){
$match=$d;
$specie=$d;
$specie=str_替换(“人类”、“智人”、$specie);
$specie=str_replace(“鼠标”,“小肌肉”,$specie);
$specie=str_替换(“大鼠”、“褐家鼠”、$specie);
$Specie=str_replace(“仓鼠”、“中盘仓鼠”),$Specie;
$specie=str_替换(“SV40”,“猿猴病毒40”,“$specie”);
}否则{
$match=“0”;
$specie=“0”;
}
回声$match.“$specie.”;
$var_id=$name;
$var_match=$match;
$var\u full\u name=$specie;
#$sql=“插入物种(id、匹配、全名)值(“$var\u id.”、“$var\u match.”、“$var\u全名.”);
$sql=“更新物种集id=””、“$var\u id.”、match=”、“$var\u match.”、full\u name=”、“$var\u full\u name.”;
if($dbh->query($sql)){
echo“新记录插入成功!\n”;
}否则{
echo“数据未成功插入。\n”;
} 
}
我得到的错误是:

致命错误:未捕获PDOException:SQLSTATE[42601]:语法错误:7错误:>在“Sapiens”第1行或附近的语法错误:…物种集id='0',match=Human,全名=Homo Sapiens'^in/var/www/html/test/Insert.php:59堆栈跟踪:#0/var/www/html/test/Insert.php(59):PDO->query('UPDATE species…')#1{main}在第59行的/var/www/html/test/Insert.php中抛出


当我使用以下语法时,错误消失了。此查询需要用于更新

$sql = "UPDATE species SET match ='".$var_match ."', full_name='".$var_full_name."' WHERE id = '".$var_id."' ";

您应该使用select查询来确定该值是新值还是旧值。如果更新旧数据,则插入数据

作用 更新 插入
注意您的案例:
$specie
$specie
。在查询中,您可能需要添加一个
,其中id=$id
,除非您想更新所有记录。如果更新您也不想更新该特定记录的
id
,我想更新所有记录。那么,您会得到什么错误?您构建的hmm查询是更新物种集id='0',match='Human',full_name='Homo Sapiens',这与错误不符,引用的原因我知道这个特定的示例并没有直接显示直接使用用户输入的证据,但即使如此,您也不应该通过附加字符串来构建SQL查询。它是在为恶意原因()和意外问题(我看到有人输入姓氏为O'Leary时,有足够多的DB应用程序崩溃)而自找麻烦。PDO提供了预先准备好的语句,我强烈建议您使用它们。它将一直工作,直到您的任何替换变量包含一个
字符,此时它将消失。如果有人进来,愿上帝保佑你。
Robert');删除一些重要数据的表格--进入你的应用程序!请学习使用PDO的prepared语句功能。如果任何输入包含撇号(
),这些功能都将失败,并且都可能被SQL注入攻击滥用。如果变量包含('),则可以在使用settype插入之前将所有变量设置为字符串。settype($var_test1,“string”)。如果您自己使用代码检索数据,SQL注入攻击将是一个问题。那么,您是否必须修改您的代码以防止这种攻击?settype应该如何提供帮助?如果输入开始时是一个带撇号的字符串,那么之后它仍然是一个带撇号的字符串。要插入任何SQL查询的任何变量都应该通过预处理语句插入。我不知道为什么它会起作用,但在我的插入数据中有一个“符号”时,它就起作用了。
$sql = "UPDATE species SET match ='".$var_match ."', full_name='".$var_full_name."' WHERE id = '".$var_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";
    } 
}
$query = 'SELECT * FROM tbl '. 'WHERE "test1" = '. 
        "'".$var_test."'" . 'AND "test2" = '. 
        "'".$var_test2."'";
        $stmt = $dbh->prepare($query);
        $stmt->execute();
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

        $outcome = $stmt->fetch();
        if ($outcome !== false){
            $sql = "UPDATE tbl SET test1 = '".$var_test1."', test2 = '".$var_test2."', 
            test3 = '".$var_test3."'
            "WHERE id = '".$var_id."' ";
            execute_query($sql,$dbh);
    }else{    
        $sql = "INSERT INTO genes 
        (id,test1,test2,test3) 
        VALUES ('".$var_id."','".$var_test1 ."','".$var_test2."','".$var_test3."')";
        execute_query($sql,$dbh);
    }