如何在Mysql&中插入带单引号的字符串; Oracle数据库?

时间:2012-03-26 16:56:18

标签: php mysql sql oracle escaping

我在插入单引号值(比如产品名称: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 db类似的问题。在Oracle中,我尝试了这一点:"'". $row["name"] . "'',"最后使用''

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

select q'my 'quoted text' ' from dual

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