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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение 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
как вы понимаете мне эти два двойных слеша не дают правильны запрос. Как можно их убрать и из-за чего они появляются.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение rak »

% экранируется
а вообще запрос неправильный :)
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение Sergalas »

rak писал(а):% экранируется
а вообще запрос неправильный :)
это я догадался, а как сделать
1 правильный запрос
2 избавиться от экранирования, методом отключения в htaccess magic_quotes_gpc не помогает.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение rak »

Sergalas писал(а):
rak писал(а):% экранируется
а вообще запрос неправильный :)
это я догадался, а как сделать
1 правильный запрос
2 избавиться от экранирования, методом отключения в htaccess magic_quotes_gpc не помогает.
1. убрать $querys=str_replace(' ','%',$query);
2. никак, все экранируется правильно
Аватара пользователя
woland
Сообщения: 12
Зарегистрирован: 2012.11.11, 11:01

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

Сообщение woland »

Судя по выводу дебагера лучше не убрать $querys=str_replace(' ','%',$query) а заменить на $querys=trim($query)
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение 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 уже ответил. Вот поэтому все и телодвижения.
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение 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
поэтому и я придумал костыль с % но он не работает вернее как работает но добавляется два обратных слеша перед процентом
Аватара пользователя
woland
Сообщения: 12
Зарегистрирован: 2012.11.11, 11:01

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

Сообщение woland »

попробуйте запрос :
SELECT * FROM `fl_serial` WHERE (`name_serial` LIKE '%Елизавета+I%') OR (`description_serial` LIKE '%Елизавета+I%') LIMIT 15
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение Sergalas »

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

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

MySQL вернула пустой результат (т.е. ноль строк). (Запрос занял 0.0054 сек.) 
Аватара пользователя
woland
Сообщения: 12
Зарегистрирован: 2012.11.11, 11:01

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

Сообщение 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
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение 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 от все находится
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение rak »

Лагерь X - X это русская или английская? нужно обе попробовать, с елизаветой - та же история
можно скопировать значение поля прямо из базы данных и подставить в запрос.
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение Sergalas »

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

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

SELECT * FROM `salons` WHERE `name` LIKE '%Елизавета%I%' LIMIT 20
То поверьте первым делом я брал значения именно с базы и какой еще там уже перепробовал по указанному запросу выдает одну единственно верную строку. Если бы получилось избавится в запросе от экранирования было бы здорово.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

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

Сообщение rak »

Sergalas писал(а):SELECT * FROM `salons` WHERE `name` LIKE '%Елизавета%I%' LIMIT 20.
суть в том, что такой запрос вернет любой документ, в котором будет слово елизавета и I, причем между ними может быть ещё 5 параграфов текста, так что это не выход уж точно, нужно искать проблему в mysql
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

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

Сообщение Sergalas »

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