如何在MySQL存储过程中使用通配符

时间:2015-04-21 11:33:03

标签: php mysql stored-procedures

PHP 5.5,MySQL 5.6

尝试创建一个存储过程,该存储过程实现使用通配符来搜索具有由|分隔的选项的字段。

尝试将以下嵌入式查询转换为存储过程:

$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是正确的。谢谢@Ravinder。一个简单的判断错误。我在错误的数据库中修改了记录。

1 个答案:

答案 0 :(得分:0)

让程序2工作的另一个解决方案是更改行:

where searchPhrases LIKE _search;

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

然后您将使用以下命令调用该过程:

Call getDealerInfo("Jack");