我想在我的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);
答案 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)