Страница 1 из 1

Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 12:29
Sergalas
И как с этим бороться
если ошеломляю такого плана запрос

Код: Выделить всё

$querys=str_replace(' ','%',$query);
$search = Serial::find()->where(['or',['like', 'name_serial',  $querys],['like', 'description_serial',  $querys]])->limit(30);
 
то почему то он выглядит так в дебагере
SELECT * FROM `fl_serial` WHERE (`name_serial` LIKE '%Елизавета\\%I%') OR (`description_serial` LIKE '%Елизавета\\%I%') LIMIT 15
как вы понимаете мне эти два двойных слеша не дают правильны запрос. Как можно их убрать и из-за чего они появляются.

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 12:53
rak
% экранируется
а вообще запрос неправильный :)

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 13:01
Sergalas
rak писал(а):% экранируется
а вообще запрос неправильный :)
это я догадался, а как сделать
1 правильный запрос
2 избавиться от экранирования, методом отключения в htaccess magic_quotes_gpc не помогает.

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 14:48
rak
Sergalas писал(а):
rak писал(а):% экранируется
а вообще запрос неправильный :)
это я догадался, а как сделать
1 правильный запрос
2 избавиться от экранирования, методом отключения в htaccess magic_quotes_gpc не помогает.
1. убрать $querys=str_replace(' ','%',$query);
2. никак, все экранируется правильно

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 17:11
woland
Судя по выводу дебагера лучше не убрать $querys=str_replace(' ','%',$query) а заменить на $querys=trim($query)

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 17:31
Sergalas
rak писал(а):
Sergalas писал(а):
rak писал(а):% экранируется
а вообще запрос неправильный :)
это я догадался, а как сделать
1 правильный запрос
2 избавиться от экранирования, методом отключения в htaccess magic_quotes_gpc не помогает.
1. убрать $querys=str_replace(' ','%',$query);
2. никак, все экранируется правильно
Проблема в том что запрос Елизавета I не ищется, а как ищется я в принципе здесь viewtopic.php?f=19&t=37279&p=191374#p191374 уже ответил. Вот поэтому все и телодвижения.

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 17:35
Sergalas
woland писал(а):Судя по выводу дебагера лучше не убрать $querys=str_replace(' ','%',$query) а заменить на $querys=trim($query)
у меня в phpmyadmine находится только таким запросом

Код: Выделить всё

SELECT * FROM `fl_serial` WHERE (`name_serial` LIKE '%Елизавета%I%') OR (`description_serial` LIKE '%Елизавета%I%') LIMIT 15
поэтому и я придумал костыль с % но он не работает вернее как работает но добавляется два обратных слеша перед процентом

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 18:10
woland
попробуйте запрос :
SELECT * FROM `fl_serial` WHERE (`name_serial` LIKE '%Елизавета+I%') OR (`description_serial` LIKE '%Елизавета+I%') LIMIT 15

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 18:25
Sergalas
woland писал(а):попробуйте запрос :
SELECT * FROM `fl_serial` WHERE (`name_serial` LIKE '%Елизавета+I%') OR (`description_serial` LIKE '%Елизавета+I%') LIMIT 15

Код: Выделить всё

MySQL вернула пустой результат (т.е. ноль строк). (Запрос занял 0.0054 сек.) 

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 18:45
woland
проверил у себя запрос с пробелами :
$query->andFilterWhere(['like', 'name', $this->name])
SELECT * FROM `salons` WHERE `name` LIKE '%Название салона 2%' LIMIT 20
всё нормально работает и чистым SQL и через конструктор запросов Yii
у меня:
<meta charset="UTF-8">
таблица utf8_unicode_ci

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 19:02
Sergalas
woland писал(а):проверил у себя запрос с пробелами :
$query->andFilterWhere(['like', 'name', $this->name])
SELECT * FROM `salons` WHERE `name` LIKE '%Название салона 2%' LIMIT 20
всё нормально работает и чистым SQL и через конструктор запросов Yii
у меня:
<meta charset="UTF-8">
таблица utf8_unicode_ci
да в том то и прикол что Игра Пристолов даже Вавилон 5 нормально отрабатывается, а такие запросы как Елизавета I, Лагерь X и тд не находятся но если запрос оформить как SELECT * FROM `salons` WHERE `name` LIKE '%Елизавета%I%' LIMIT 20 от все находится

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 19:07
rak
Лагерь X - X это русская или английская? нужно обе попробовать, с елизаветой - та же история
можно скопировать значение поля прямо из базы данных и подставить в запрос.

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 19:19
Sergalas
rak писал(а):Лагерь X - X это русская или английская? нужно обе попробовать, с елизаветой - та же история
можно скопировать значение поля прямо из базы данных и подставить в запрос.
Ну если я уже нащупал вот так с английской

Код: Выделить всё

SELECT * FROM `salons` WHERE `name` LIKE '%Елизавета%I%' LIMIT 20
То поверьте первым делом я брал значения именно с базы и какой еще там уже перепробовал по указанному запросу выдает одну единственно верную строку. Если бы получилось избавится в запросе от экранирования было бы здорово.

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 19:25
rak
Sergalas писал(а):SELECT * FROM `salons` WHERE `name` LIKE '%Елизавета%I%' LIMIT 20.
суть в том, что такой запрос вернет любой документ, в котором будет слово елизавета и I, причем между ними может быть ещё 5 параграфов текста, так что это не выход уж точно, нужно искать проблему в mysql

Re: Откуда берутся два обратных слеша

Добавлено: 2016.07.02, 19:45
Sergalas
rak писал(а):
Sergalas писал(а):SELECT * FROM `salons` WHERE `name` LIKE '%Елизавета%I%' LIMIT 20.
суть в том, что такой запрос вернет любой документ, в котором будет слово елизавета и I, причем между ними может быть ещё 5 параграфов текста, так что это не выход уж точно, нужно искать проблему в mysql
Меня как раз это и устраивает. Тем более так я ставить буду только по названию так что количество документов будет сокращено.