2015-04-21 2 views
1

PHP 5.5, MySQL 5.6Как использовать подстановочные символы в MySQL хранимые процедуры

Попытка создать хранимую процедуру, которая реализует использование Wildcards для поиска поле, которое имеет параметры, которые разделены. |

Попытка преобразовать следующий вложенный запрос в хранимую процедуру:

$keywords = "Jack"; 
$sql='select * FROM dealers where searchPhrases LIKE "%|'.$keywords.'|%"'; 
$res=mysql_query($sql); 

Здесь хранится процедура Вариант 1, они вызываются с помощью PHP PDO, пытаясь обновить проект, удалив использование mysql_query из проект.

DROP PROCEDURE IF EXISTS `getDealerInfo`// 
CREATE PROCEDURE `getDealerInfo`(
    IN _search VARCHAR(100) 
) 
BEGIN 
SET @query = CONCAT(
     'select * 
     FROM dealers 
     where searchPhrases LIKE "%|' 
     ,_search 
     ,'|%"'); 
    PREPARE stmt FROM @query; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END// 

Вот процедура 2:

DROP PROCEDURE IF EXISTS `getDealerInfo2`// 

CREATE PROCEDURE `getDealerInfo2`(
    IN _search VARCHAR(100) 
) 
BEGIN 
select * 
FROM dealers 
where searchPhrases LIKE _search; 

END// 

Я тестирование как с помощью MySQL консоли и для каждого случая я получаю 0 результатов.

Call getDealerInfo("Jack"); 
Call getDealerInfo2("%|Jack|%"); 

Оба этих запросов в MySQL консоли возврата 0 записей, но если я использую PHP выше я получаю обратно по крайней мере 1 запись для запроса. Как я могу исправить мою хранимую процедуру, чтобы работать с символом подстановки?


Решение - хранимая процедура 1 верна. Спасибо, @ Равиндер. Простая ошибка в суждении. Я изменил запись в неправильной базе данных.

+1

2 один неверно, но 1-й должен работать. Опубликуйте некоторые записи в таблице. –

+0

@Ravinder - вот копия результатов поискаPhrases Я ищу: '| Jack | Harris | Jack Harris |' – mcv

+0

У вашего нынешнего подхода много скрытых осложнений - и зачем идти на большие проблемы, когда MySQL поставляется с Введена очень эффективная грамматика поиска текста? http://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html – symcbean

ответ

0

Другое решение, чтобы получить процедуру 2 на работу было бы изменить строку:

where searchPhrases LIKE _search; 

к

where searchPhrases LIKE CONCAT('%|',_search,'|%'); 

Вы бы затем вызвать процедуру:

Call getDealerInfo("Jack"); 
Смежные вопросы