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。一个简单的判断错误。我在错误的数据库中修改了记录。
答案 0 :(得分:0)
让程序2工作的另一个解决方案是更改行:
where searchPhrases LIKE _search;
到
where searchPhrases LIKE CONCAT('%|',_search,'|%');
然后您将使用以下命令调用该过程:
Call getDealerInfo("Jack");