如何在Mysql&;Oracle数据库


How to insert string with single quote in Mysql & Oracle database?

我在插入单引号时遇到问题(比如产品名称: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_eescape_string()和html_entity_decode(),但仍然出现错误。这里$row[name]正在获取值,类似于xyz80'、pqr75'等。由于我是通过PHP插入这些值的,所以无法准确获取错误发生的位置。

Oracledb也面临类似的问题。在Oracle中,我尝试了以下操作:"'". $row["name"] . "'',"在最后使用''

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

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

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

对于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中,两个连续的单引号表示字符串文字中的单引号。

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

select q'my 'quoted text' ' from dual

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