Не работает pg_escape_string

Я хочу использовать pg_escape_string в моем password может ли кто-нибудь сказать мне, что он используется? в моей таблице insert postgresql

 $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 не работает

Это wil принимает '~!@#$%^*()_=- {} |] [: "'; <>? /.,' except & и +` string.

моя строка вставки строки & строка как null value а после & строка all values are null а в случае + string this is only null

Plz Не ссылайтесь на меня

Я передаю содержимое поля формы через 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); 

Забудьте о pg_escape_string и подобных «обходных решениях».

То, что вы хотите, – это подготовленные операторы и параметры привязки или (в случае, если вы не хотите прыгать вправо), по крайней мере, pg_query_params .

Просто используйте 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 ); - $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 на сегодняшний день является самым простым aproach для взаимодействия с вашей базой данных.

Я почти уверен, что ваша проблема заключается в отправке содержимого на бэкэнд, а не в его отправке в базу данных. В данных Url знаки & и + обрабатываются специально. Однако, если вы не используете метод AJAX, у вас не будет проблем. Если вы используете метод AJAX для публикации, используйте Url encode. Если вы используете библиотеку AJAX, она может содержать метод для этого, если нет, вы можете использовать версию webtoolkit, которая представляет собой один файл.

Лучше всего здесь было бы закодировать пароль, а затем ввести его в базу данных. Таким образом, вы не получите никаких проблем с экранированием.

Способ сделать это:

 $escaped = md5($password); 

И когда вы проверяете, совпадает ли пароль, выполните:

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

Попробуй это

  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); 

Google вокруг, похоже, что существует проблема с pg_escape_string () (и другой функцией pg_ *) с PHP 5.3 (см. http://bugs.php.net ). Din't еще не нашел окончательного ответа / решения (за исключением, возможно, перехода на PHP 5.2 на некоторое время).

Post Scriptum: В моем случае (я использую Ubuntu Maverick) я обнаружил, что проблема была исправлена ​​после выполнения обновления до системы (sudo apt-get upgrade)