pg_escape_string和单引号 - 比str_replace更好的方法?

时间:2015-02-25 16:26:36

标签: php postgresql

我通过php脚本将html表单数据输入到postgre。我对从POST数据中获取的每个输入字符串执行以下处理:

  function sanitizeString($var, $con)
  {
    $var = strip_tags($var);
    $var = htmlentities($var);
    $var = stripslashes($var);
    return pg_escape_string($con, $var);
  }

每当我的输入中有单引号时,它就会转换为两个单引号。我认为这可能是由于sanitizeString()函数中的stripslashes(),但即使我注释掉该行的sanitizeString(函数来自动态网站上的O' Reilly书,我可以'记得作者,是的,我知道人们讨厌这个功能)。

我看到有些人建议使用PDO对象来避免这个单引号问题(Escaping single quote and save to database with quote),但是我使用pg_特定函数来进行参数化查询,并且现在不想改变所有内容到PDO。

我有3个相关问题,从最具体到最不具体:
(1)每次访问可能包含单引号的字符串时,如何只用一个引号来存储和显示字符串比仅仅执行str_replace更优雅?
(2)我应该担心其他有缺陷的人物吗?
(3)保存在数据库中然后显示输入的html表单输入的最佳方法是什么?似乎没有灵丹妙药,但如果有最好的'我没有能够通过谷歌找到它并希望得到建议。

2 个答案:

答案 0 :(得分:-1)

这对我有用

$var = " 'String' " ;
$new = pg_escape_string($var) ;

// outputs "String" 

$new  = str_replace("''", "", $new) ;    // using two single quotes

// outputs String 

答案 1 :(得分:-2)

在我的 PHP 应用程序中,只要文本中有单引号,就无法插入 postgres 数据库。并且文本中也多次出现单引号。所以,在插入数据库之前,我使用了 pg_escape_literal($textToBeInserted) 并解决了我的问题。单引号在应用程序中可见,但 postgres 不会抛出任何错误。