【问题标题】:How do I escape double quotes in oracle query?如何在 oracle 查询中转义双引号?
【发布时间】:2011-01-03 21:17:51
【问题描述】:

我在 oracle 表中有一些文本字段,它们有双引号。如何在选择查询中转义它们,以便我可以在 PHP 中使用它?

【问题讨论】:

  • 是带引号的字段names,还是字段values
  • 您确实不需要在您的查询中转义所选文本。只需像选择任何其他字段一样选择它,然后 PHP 中开展您的业务。例如str_replace('"', '"', $field); 或类似的东西。通常,您需要先对文本进行转义,然后再将其插入到数据库表中。

标签: php oracle escaping


【解决方案1】:

如果您尝试这样做,您可能会遇到 SQL 注入漏洞。请谷歌一下,想想你在做什么。

【讨论】:

    【解决方案2】:

    你应该可以做一个

    SELECT REPLACE(your_column, '"', '\"') AS your_escaped_column
    FROM your_table;
    

    【讨论】:

    • 反应不好。如果表包含 100000000 行,则搜索所有行并替换该值。
    • @费尔南多。恐怕我不完全理解你的评论。我没想到这个查询会被用来返回所有 100,000,000 行,而是被 another 列过滤。在这种形式中可能不需要转义引号(请参阅其他 cmets/answers),但我不希望它在查询中比在 PHP 中慢。
    【解决方案3】:

    你试过了吗:"\""

    【讨论】:

      【解决方案4】:

      嗯...您可以像选择任何其他字段一样选择它们。当您将事物 in 放入需要转义它们的数据库时。

      这有不同的机制,具体取决于您使用的数据库抽象层或驱动程序。

      对于驱动程序,我推荐 PDO。这样一来,无论您使用哪个数据库,转义字段以进行输入总是会是这样的:

      // Assuming that $dbh is a valid PDO object, like this one:
      // $dbh = new PDO('oci:dbname=//hostname:1521/scott', 'scott', 'tiger');
      // That's 'oci:dbname=//hostname:port-number/database', username, password
      
      $sql = "SELECT * FROM myTable WHERE name = ':myName'";
      $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
      $sth->execute(array(':myName' => "Ed O'Neil"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多