【问题标题】:How to insert string with single quote in Mysql & Oracle database?如何在 Mysql 和 Oracle 数据库中插入带单引号的字符串?
【发布时间】:2012-03-26 16:56:18
【问题描述】:

我在插入单引号时遇到问题(比如产品名称:xyz80')。那么如何将这些数据插入 mysql & oracle 数据库。使用双引号,它工作正常。例如:xyz90"

我的脚本:

$query2 = "SELECT sfoi.name, sfoi.sku, sfoi.qty_ordered
FROM  sales_flat_order sfo
JOIN sales_flat_order_item sfoi
ON sfoi.order_id = sfo.entity_id
WHERE sfo.increment_id = 100000473";
$result_query2 = mysql_query($query2);
while($row = mysql_fetch_array($result_query2))
{
     $row["name"] = mysql_real_escape_string($row["name"]);
    // $row["name"] = html_entity_decode($row["name"]);
      $result_str_product .= "('". $row["name"] . "',". "'" . $row["sku"] . "'," . "'" . $row["qty_ordered"]),";
}

我尝试同时使用 mysql_real_escape_string() 和 html_entity_decode(),仍然出现错误。 这里 $row[name] 正在获取类似于 xyz80'、pqr75' 等的值。当我通过 PHP 插入这些值时,无法准确地找到发生错误的位置。

我也面临与 Oracle 数据库类似的问题。在 Oracle 中,我尝试了这个:"'". $row["name"] . "''," 最后使用 ''

如何在 Oracle 数据库中插入特殊字符?

【问题讨论】:

  • mysql_real_escape_string 应该可以解决问题。 $result_str_product 的其余部分在哪里设置和使用?您收到的确切错误消息是什么?
  • $result_str_product 是您正在构建插入语句的字符串吗?如果是这样,您真的应该使用占位符(又名绑定变量)准备查询。这将解决报价问题,对于 Oracle 而言,它也会更快。

标签: php mysql sql oracle escaping


【解决方案1】:

在编写查询之前,通过将一个' 替换为两个'' 来准备数据:

while($row = mysql_fetch_array($result_query2)) {
  $n = mysql_real_escape_string($row["name"]);
  $s = mysql_real_escape_string($row["sku"]);
  $q = mysql_real_escape_string($row["sku"]);
 // $n = html_entity_decode($row["qty_ordered"]);
  $result_str_product .= "('$n','$s','$q'),";
}

// remember_to_remove_final_stray_comma($result_str_product);

print( $result_str_product ); // just to see what's been made

【讨论】:

    【解决方案2】:

    对于Oracle,您可以在查询时将单引号替换为两个单引号:

    $query2 = "SELECT REPLACE(sfoi.name,'''','''''') name, sfoi.sku, sfoi.qty_ordered 
                 FROM  sales_flat_order sfo JOIN sales_flat_order_item sfoi 
                                              ON sfoi.order_id = sfo.entity_id
                WHERE sfo.increment_id = 100000473"; 
    

    那么您的其余代码应该可以正常工作。

    在 Oracle 中,两个连续的单引号表示字符串文字中的一个单引号。

    【讨论】:

      【解决方案3】:

      Oracle 现在有用于转义字符串的 q 函数 http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_sqltypes.htm#sthref373

      select q'my 'quoted text' ' from dual
      

      这个解决方案很好,因为您不必有一堆嵌套引号

      【讨论】:

      • 我讨厌某些编辑无法使用此解决方案正确着色语法:)
      • 同意,来自 allroundautomations 的 pl/sql 开发人员(与他们无关,只使用他们的产品)在颜色编码方面做得很好
      • Toad 最新版本也是如此,但例如Notepad++ 不明白
      猜你喜欢
      • 1970-01-01
      • 2015-02-15
      • 2011-07-04
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 2020-10-24
      相关资源
      最近更新 更多