web-dev-qa-db-fra.com

Comment utiliser une variable utilisateur dans la clause MySQL LIKE?

J'essaie de configurer quelques scripts SQL simples pour aider à l'administration d'une base de données à court terme . En tant que tel, je configure des variables pour faciliter la réutilisation de ces scripts.

Le problème que je rencontre concerne spécifiquement la clause LIKE.

SET @email = '[email protected]';

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

Donc, je veux qu'il trouve des résultats basés sur le SET email dans la variable. La requête fonctionne si je saisis manuellement le courrier électronique dans la clause LIKE.

Comment puis-je faire en sorte que la clause LIKE fonctionne avec la variable utilisateur?

UPDATE: La réponse de @ dems fonctionne pour ce cas simple, mais j'ai des problèmes avec une requête plus complexe.

SET @email = '[email protected]';

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, '%')

Me donne l'erreur "FONCTION mydb.CONCAT n'existe pas"

La requête fonctionne sans CONCAT ():

SET @email = '[email protected]';

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
28
Chris
SET @email = '[email protected]';

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

Fonctionne sans concat ():

LIKE '%{$var}%'

(Mysql version 5. +)

2
Irina

Pas besoin de CONCAT, utilisez simplement '%' + Variable + '%'

SET @email = '[email protected]';

SELECT email de user WHERE email LIKE '%' + @email + '%';

1
Anand Maurya

Utiliser la même syntaxe que Oracle semble fonctionner:

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

0
Sergio Castillo

J'ai résolu en utilisant la fonction CONCAT avant d'utiliser l'instruction LIKE:

SET @email = '[email protected]';
set @email = CONCAT('%',@email,'%');
SELECT email from `user` WHERE email LIKE @email;

Ça fonctionne bien pour moi

BEGIN 
    SET @emailid = CONCAT('%', '[email protected]' ,'%');
    SET @t1 =CONCAT('SELECT * FROM user WHERE email LIKE ''', @emailid, '''');
    PREPARE stmt3 FROM @t1;
    EXECUTE stmt3;
    DEALLOCATE PREPARE stmt3;
END
0
Amey Vartak

Vous pouvez avoir une erreur

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

Dans ce cas, vous devez spécifier le même classement que celui utilisé pour votre table:

SET @email = '[email protected]' COLLATE utf8_unicode_ci;
0