如何在MySQL中使用用户变量LIKE子句?

v440hwme  于 2022-12-28  发布在  Mysql
关注(0)|答案(7)|浏览(173)

我试图设置一些简单的SQL脚本来帮助一些短期的数据库管理。因此,我设置变量来尝试使重用这些脚本更容易。
我遇到的问题特别是LIKE子句。

SET @email = 'test@test.com';

SELECT email from `user` WHERE email LIKE '%@email%';

所以我想让它根据变量中设置的电子邮件来查找结果。如果我手动将电子邮件输入到LIKE子句中,查询就可以工作。
如何让LIKE子句与用户变量一起使用?
更新:@dems的答案适用于这个简单的情况,但是我在处理更复杂的查询时遇到了麻烦。

SET @email = 'test@test.com';

SELECT project.projectno, project.projectname, login.username, 
CONCAT(login.firstname, ' ', login.lastname), projectuser.title 
FROM projectuser 
INNER JOIN login ON projectuser.uid = login.uid 
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE CONCAT ('%', @email, '%')

返回错误“函数mydb.CONCAT不存在”
该查询不使用CONCAT():

SET @email = 'test@test.com';

SELECT project.projectno, project.projectname, login.username, 
CONCAT(login.firstname, ' ', login.lastname), projectuser.title 
FROM projectuser 
INNER JOIN login ON projectuser.uid = login.uid 
LEFT JOIN project ON projectuser.pid = project.pid
WHERE login.username LIKE @email
klsxnrf1

klsxnrf11#

SET @email = 'test@test.com';

SELECT email from `user` WHERE email LIKE CONCAT('%', @email, '%');
odopli94

odopli942#

您可能有错误

Error Code: 1267. Illegal mix of collations for operation 'like'    0.016 sec

在这种情况下,您需要指定与表中使用的排序规则相同的排序规则,如下所示:

SET @email = 'test@test.com' COLLATE utf8_unicode_ci;
vhipe2zx

vhipe2zx3#

我在使用LIKE语句之前使用CONCAT函数解决了这个问题:

SET @email = 'test@test.com';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;

对我来说很好用

9jyewag0

9jyewag04#

BEGIN 
    SET @emailid = CONCAT('%', 'email@email.com' ,'%');
    SET @t1 =CONCAT('SELECT * FROM user WHERE email LIKE ''', @emailid, '''');
    PREPARE stmt3 FROM @t1;
    EXECUTE stmt3;
    DEALLOCATE PREPARE stmt3;
END
vnjpjtjt

vnjpjtjt5#

Jan '22我在使用LIKE命令时遇到了一个问题。通过回显变量值和SQL语句,我发现引号函数在变量周围打了勾。获取业务类型的代码:

isset($_POST['button']) ? $businesstype = get_post($pdo, 'button'): 
$businesstype  = get_post($pdo, 'businesstype');

function get_post($pdo, $var)
  {
    return htmlentities($pdo->quote($_POST[$var]));
  }

$businesstype的回显:理发师
SQL回显:选择业务名称、会员编号、街道、城市FROM成员WHERE verified = TRUE AND业务类型LIKE 'Barber'按功能级别描述、会员资格日期描述、业务名称排序
由于搜索值已经用单引号括起来了,所以要使用LIKE,我必须在第一个勾号之后和最后一个勾号之前获得%。我使用了字符串替换函数和concat操作符的组合:将原来的单引号替换为空,并将搜索值前后的“%”和“%”串联起来。

$businesstype ="'%" . str_ireplace("'","",$businesstype) . "%'";

。对我很有效。我希望它能对某人有所帮助。如果我正在以某种方式取消SQL注入保护,请让我知道。

wljmcqd8

wljmcqd86#

使用与oracle相同的语法似乎可以工作:
第一个月

lndjwyie

lndjwyie7#

无需CONCAT,只需使用“%”+变量+“%”:

SET @email = 'test@test.com';
SELECT email from `user` WHERE email LIKE '%' + @email + '%';

相关问题