Postgres中UPDATE查询的正确语法是什么?

时间:2017-10-26 06:30:36

标签: postgresql

我有一个示例查询我想要做什么,但语法是在MySQL中。

 $sql = "UPDATE tbl_sample SET ".$column_name."='".$text."' WHERE id='".$id."'";  

但必须使用Postgres语法完成。抱歉,我只是后端编程的新手。

这是某些页面的其他src main.php

$(document).ready(function(){  
  function fetch_data()  
  {  
       $.ajax({  
            url:"dbselect.php",  
            method:"POST",  
            success:function(data){  
                 $('#live_data').html(data);  
            }  
       });  
  }  
  fetch_data();  
  $(document).on('click', '#btn_add', function(){  
       var desc = $('#desc').text();  
       var ipadd = $('#ipadd').text();
       var port = $('#port').text();
       var platform = $('#platform').text();

       if(desc == '')  
       {  
            alert("Enter Description");  
            return false;  
       }  
       if(ipadd == '')  
       {  
            alert("Enter IP Address");  
            return false;  
       }

       if(port == '')  
       {  
            alert("Enter Port Number");  
            return false;  
       }

       if(platform == '')  
       {  
            alert("Enter DB Platform");  
            return false;  
       } 
       $.ajax({  
            url:"dbinsert.php",  
            method:"POST",  
            data:{desc:desc, ipadd:ipadd, port:port, platform:platform},  
            dataType:"text",  
            success:function(data)  
            {  
                 alert(data);  
                 fetch_data();  
            }  
       }) 
  });  
  function edit_data(id, text, column_name)  
  {  
       $.ajax({  
            url:"dbedit.php",  
            method:"POST",  
            data:{id:id, text:text, column_name:column_name},  
            dataType:"text",  
            success:function(data){  
                 alert(data);  
            }  
       });  
  }   $(document).on('blur', '.desc', function(){  
       var id = $(this).data("id1");  
       var desc = $(this).text();  
       edit_data(id, desc, "desc");  
  });  
  $(document).on('blur', '.ipadd', function(){  
       var id = $(this).data("id2");  
       var ipadd = $(this).text();  
       edit_data(id,ipadd, "ipadd");  
  });

  $(document).on('blur', '.port', function(){  
       var id = $(this).data("id3");  
       var port = $(this).text();  
       edit_data(id,port, "port");  
  });

  $(document).on('blur', '.platform', function(){  
       var id = $(this).data("id4");  
       var platform = $(this).text();  
       edit_data(id,platform, "platform");  
  });  

  $(document).on('click', '.btn_delete', function(){  
       var id=$(this).data("id5");  
       if(confirm("Are you sure you want to delete this?"))  
       {  
            $.ajax({  
                 url:"dbdelete.php",  
                 method:"POST",  
                 data:{id:id},  
                 dataType:"text",  
                 success:function(data){  
                      alert(data);  
                      fetch_data();  
                 }  
            });  
       }  
    });  
 });

这里是插入查询:

<?php  
   $connect = pg_connect("host=localhost dbname=dbinv user=postgres          password=moira port=5432");  
   $sql = "INSERT INTO \"kbc\".dbinventory(desc,ipadd,port,platform)
   values ('".$desc."','".$ipadd."','".$port."','".$platform."')"; 
   if(pg_query($connect, $sql))  
   {  
  echo 'Data Inserted';  
   }  
  ?> 

以及我关注的编辑查询:

<?php  
$connect = mysqli_connect("localhost", "root", "", "test_db");  
$id = $_POST["id"];  
$text = $_POST["text"];  
$column_name = $_POST["column_name"];  
$sql = "UPDATE tbl_sample SET ".$column_name."='".$text."' WHERE   id='".$id."'";  
if(pg_query($connect, $sql))  
{  
  echo 'Data Updated';  
}  
?>

数据库已完成,但仍无效。我是俯瞰还是我错过了什么或者是错的?请好好看看这些src并告诉我哪些应该加强/改变。

1 个答案:

答案 0 :(得分:2)

实际问题是您构建的查询存在危险错误。最有可能$text$id中有引号或类似内容,因此该语句的语法无效。

e.g。如果$textO'Reilly,您将获得:

ERROR: ERROR:  syntax error at or near "Reilly"

请阅读https://en.wikipedia.org/wiki/SQL_injection

您没有提供有关您正在使用的工具/语言/等的任何详细信息,但您应该使用查询参数绑定(“预备语句”)支持您的语言和数据库驱动程序。

假设您使用的是PHP,请阅读:

使用正则表达式进行自制引用,或者使用PHP addslashes等不安全函数,“修复”这个。

如果在MySQL中有效,我假设您在没有启用ANSI QUOTES选项和"double quoted"标识符的情况下使用它。或者你试图使用反斜杠进行转义,例如'O\'Reilly'在ANSI SQL兼容数据库中无法正常工作。您必须将引号加倍,例如'O''Reilly'。但见上文;不要这样做,而是在预准备语句中使用绑定参数。