pg_escape_string不起作用

时间:2011-05-17 10:04:46

标签: php postgresql

我想在我的pg_escape_string中使用password任何人都可以使用它来使用它吗?在我的postgresql insert表中

$query = "insert into vmobjects (guid,ipaddress,username,password,hostid,vmname,guestostype) values('".$guid."','".$ip."','".$username."','".$password."','".$hostid."','".$name."','".strtolower($os)."')";

我正在使用$escaped = pg_escape_string($password);

$query = "insert into vmobjects (guid,ipaddress,username,password,hostid,vmname,guestostype) values('".$guid."','".$ip."','".$username."','".$escaped ."','".$hostid."','".$name."','".strtolower($os)."')";

但它不起作用 它不会带我的& and +字符串...就像我插入@#&$%&^*作为密码然后after @#它显示nul values .... pg_escape_string不工作

需要'~!@#$%^*()_=- {} |] [:“';<>?/。,'except&和+`string。

我的后端表格行&字符串null value以及&字符串all values are null之后 在+ string this is only null

的情况下

Plz请勿参考网站手册

Ya我正在通过AJAX将表单字段的内容发布到PHP脚本并使用此代码

if(!http)
            http = CreateObject();  

        nocache = Math.random();

        http.open('post', 'addvm.php');
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
        http.setRequestHeader("Content-length", params.length);
        http.setRequestHeader("Connection", "close");
        http.onreadystatechange = SaveReply;

        http.send(params);

6 个答案:

答案 0 :(得分:7)

忘掉pg_escape_string和类似的“变通办法”。

你想要的是prepared statements and bind parameters或(如果你不愿意直接进入)至少pg_query_params

答案 1 :(得分:3)

只需使用pg_query_params()使事情变得非常简单:

$query = "
INSERT INTO vmobjects 
  (guid,ipaddress,username,password,hostid,vmname,guestostype) 
VALUES($1, $2, $3, $4, $5, $6, $7)"; // $1 to $7 are the placeholders
$result = pg_query_params(
  $connection, // your database connection should be here
  $query,      // the query itself, including placeholders
  array($guid,$ip,$username,$password,$hostid,$name,strtolower($os) // array with values
);

使用pg_query_params时不需要pg_escape_string。到目前为止,pg_query_params是与数据库交互的最简单的方法。

答案 2 :(得分:1)

我几乎可以确定您的问题是将内容发送到后端,而不是将其发送到数据库。在Url数据中,&和+标志是专门处理的。但是,除非你使用类似AJAX的方法,否则你不会遇到问题。如果您使用类似AJAX的方法发布,请使用Url编码。如果您使用的是AJAX库,它可能包含一个方法,如果没有,您可以使用webtoolkit版本,这是一个单独的文件。

答案 3 :(得分:0)

这里最好的做法是对密码进行编码,然后将其输入数据库。这样,您就不会遇到任何逃避问题。

这样做的方法是:

$escaped = md5($password);

当您检查密码是否匹配时,请执行以下操作:

if (md5($user_entered_password) == $password)...

答案 4 :(得分:0)

试试这个

 params = 
 "guid="      + encodeURIComponent(szguid)     + 
 "&username=" + encodeURIComponent(szusername) +
 "&password=" + encodeURIComponent(szpassword) +
 "&ip="       + encodeURIComponent(ip)         +
 "&name="     + encodeURIComponent(name)       +
 "&os="       + encodeURIComponent(os);
    //alert(params);
    document.body.style.cursor = 'wait';//change cursor to wait

    if(!http)
        http = CreateObject();  

    nocache = Math.random();

    http.open('post', 'addvm.php');
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.onreadystatechange = SaveReply;
    http.send(params);

答案 5 :(得分:0)

谷歌周围,看起来pg_escape_string()(以及其他pg_ *函数)与PHP 5.3存在问题(见http://bugs.php.net)。尚未找到明确的答案/解决方案(除非可能会在一段时间内降级到PHP 5.2)。

Post Scriptum: 在我的情况下(我正在使用Ubuntu Maverick)我发现在执行升级到系统后问题已解决(sudo apt-get upgrade)