2016-11-15 6 views
1

Я вообще не знаю PHP, поэтому я борюсь за это. Мне нужно добавить раздел or в запрос MySQL, но значения, которые я ищу, имеют двойные кавычки. Мне нужно выяснить, как добавить их в PHP, чтобы они были переданы в MySQL. Текущий запрос выглядит следующим образом:Двойные кавычки в PHP

$query = 'SELECT * FROM ' .$tableName.' WHERE allowed_countries LIKE "%'.$regionId.'%" and skurules REGEXP "i:'.$secondlastdigit.';" and status = 1 ORDER BY id DESC LIMIT 1'; 

Но мне нужно добавить or заявление для поиска строковых значений, который выглядит как:

$query = 'SELECT * FROM ' .$tableName.' WHERE allowed_countries LIKE "%'.$regionId.'%" and skurules REGEXP "i:'.$secondlastdigit.';" or skurules REGEXP "s:1:'.$secondlastdigit.';" and status = 1 ORDER BY id DESC LIMIT 1'; 

двойные кавычки вокруг второй экземпляр»$ secondlastdigit.. «; при переходе в MySQL.

Моя JSON строка Я ищу выглядит следующим образом:

a:12:{i:1;s:2:"15";i:2;s:2:"10";i:3;s:2:"30";i:4;s:2:"50";i:5;s:3:"120";i:6;s:3:"240";i:7;s:3:"480";i:8;s:3:"960";i:9;s:4:"3786";s:1:"A";s:3:"100";s:1:"C";s:2:"60";s:1:"B";s:5:"18930";} 

ответ

2

Прежде всего: НЕ.

Если вы все еще хотите, то ... ДЕЙСТВИТЕЛЬНО НЕ ДЕЛАЕТ.

Выполнение SQL-запросов на сериализованных массивах - это просто ад. Вы должны стараться избегать его любой ценой.

Либо:

  • Преобразование сериализированного столбца в стандартного SQL таблица
  • или выберите столбец в переменную PHP, десериализируются это и поиск через него.

Пример:

$properPhpArray = unserialize($sqlResult['column_name']); 
0

Согласовано, поиск сериализован строка не является лучшим решением, и то, что разработчик сделал, несмотря на стол bottle_size доступны. Мне понадобилось быстрое исправление и отсутствие времени/навыков для перерасчета налогового расчета magento extension, поэтому я заменил в запросе решение моей проблемы на данный момент.

Поскольку «s: 1: X» всегда будет только одним альфа-символом после 1 и не будет соответствовать ни одному другому. Я меняю запрос на:

$ query = 'SELECT * FROM'. $ TableName. ' WHERE allowed_countries LIKE «%». $ RegionId. '% "И skurules REGEXP" i:'. $ Secondlastdigit. '; " или заменить (skurules, char (34), 0) REGEXP "s: 1: 0 '. $ secondlastdigit.'0;" и status = 1 ORDER BY id DESC LIMIT 1 ';

Очень хак исправить, но получает меня из безвыходных на данный момент ..

Марк

Смежные вопросы