pg_escape_string не работает - PullRequest
4 голосов
/ 17 мая 2011

Я хочу использовать 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

Плз Не указывайте мне руководство сайта

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

7 голосов
/ 17 мая 2011

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

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

3 голосов
/ 18 мая 2011

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

1 голос
/ 18 мая 2011

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

0 голосов
/ 25 мая 2011

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

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

0 голосов
/ 24 мая 2011

Попробуйте это

 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);
0 голосов
/ 17 мая 2011

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

Способ сделать это будет следующим:

$escaped = md5($password);

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

if (md5($user_entered_password) == $password)...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...