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。一个简单的判断错误。我在错误的数据库中修改了记录。
最佳答案
使程序 2 起作用的另一种解决方案是更改行:
where searchPhrases LIKE _search;
到
where searchPhrases LIKE CONCAT('%|',_search,'|%');
然后您将调用该过程:
Call getDealerInfo("Jack");
关于php - 如何在 MySQL 存储过程中使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29771033/