【问题标题】:postgresql quotes problempostgresql引号问题
【发布时间】:2011-01-21 14:53:05
【问题描述】:
$url = "What's up with "You doing this"";
$q = sprintf ("update user set url='%s'",$url);
pg_query ($db_conn, $q)

我想完全按照用户的需要将所有内容插入数据库。我不想逃避任何事情。由于引号,上述内容对我来说会失败。我知道单引号必须围绕 postgresql 字符串 (url='%s')。由于我的 url 字符串中有双引号,因此查询不会更新。我确信我可以对所有双引号进行字符串替换并将它们设为单引号,但如果用户真的想要双引号怎么办。而且我不能使用字符串替换来放置反斜杠,因为根据 postgresql 文档,斜杠将很快被弃用(http://www.postgresql.org/docs/8.1/interactive/sql-syntax.html)加上不利于插入只有用户输入的内容。

人们建议我做什么?

【问题讨论】:

    标签: php database postgresql


    【解决方案1】:

    使用pg_escape_string 转义字符串中的引号字符。

    【讨论】:

      【解决方案2】:

      使用参数化查询:

      pg_query_params
              (
              $db_conn,
              "UPDATE user SET url = $1",
              array('What's up with "You doing this"')
              );
      

      【讨论】:

      • 我仍然喜欢使用 sprintf 的想法。这还有可能吗?
      • @keith:是的,只需将输入字符串中的单引号更改为双引号即可。在您的示例中,您没有任何内容,因此您可以将字符串保持原样。不知道你为什么不想使用参数,但这当然取决于你。
      • 你必须在what's中转义单引号 -> what\'s
      • @keith:请不要使用 sprintf,并使用参数化查询,除非你真的想让你的代码容易受到 SQL 注入的攻击......
      • @M42:这是一个过时的语法,将在未来的版本中删除。按照SQL 标准,字符串文字中的单引号应该用双引号表示。
      【解决方案3】:

      像这样在文本中转义双引号

      $url = "What\'s up with \"You doing this\"";

      【讨论】:

        猜你喜欢
        • 2018-11-24
        • 2021-10-08
        • 2016-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-13
        • 2016-10-05
        相关资源
        最近更新 更多