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

标签 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。一个简单的判断错误。我在错误的数据库中修改了记录。

最佳答案

使程序 2 起作用的另一种解决方案是更改行:

where searchPhrases LIKE _search;

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

然后您将调用该过程:

Call getDealerInfo("Jack");

关于php - 如何在 MySQL 存储过程中使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29771033/

相关文章:

mysql - 将数组发送到存储的生产者 codeigniter。 #1241 - 操作数应包含 1 列

mysql - 在 MySQL 中循环遍历结果集

mysql - Sql:使用表的列值作为存储过程的参数

php - 希望在退出时重新连接到服务器。我可以设置任何形式的 Javascript/jQuery/AJAX 陷阱吗?

javascript - 服务器在 ajax 提交时给出 403 错误

php - 无效参数和非法偏移量

php - 不打印 ID,而是打印 'Array' ?

PHP 数据库转储脚本 - 有任何问题吗?

php - 即使使用不同的折叠键,Android GCM 也会崩溃

mysql - 即使查询包含索引提示,MySQL 也不会使用索引