Как вставить строку с одинарной кавычкой в ​​базе данных MySQL и Oracle? - PullRequest
0 голосов
/ 26 марта 2012

Я столкнулся с проблемой при вставке значения в одинарных кавычках (скажем, Название продукта: 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?

Ответы [ 3 ]

4 голосов
/ 26 марта 2012

подготовьте данные, заменив одну ' на две '', прежде чем составлять запрос:

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
3 голосов
/ 27 марта 2012

Для 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 две последовательные одинарные кавычки представляют собой одну кавычку в строковом литерале.

1 голос
/ 27 марта 2012

В Oracle теперь есть функция q, используемая для экранирования строк http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_sqltypes.htm#sthref373

select q'my 'quoted text' ' from dual

это хорошее решение, потому что вам не нужно иметь кучу вложенных кавычек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...