programing

MySQL LIKE 절의 사용자 변수 사용 방법

bestcode 2022. 9. 23. 00:20
반응형

MySQL LIKE 절의 사용자 변수 사용 방법

몇 가지 간단한 SQL 스크립트를 설정하여 단기 DB 관리를 지원하려고 합니다.따라서 이러한 스크립트를 쉽게 재사용할 수 있도록 변수를 설정합니다.

제가 안고 있는 문제는 특히 LIKE 조항에 관한 것입니다.

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

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

그래서 변수에 있는 이메일 SET을 기반으로 결과를 찾도록 하고 싶습니다.이메일을 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, '%')

FUNCTION 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
SET @email = 'test@test.com';

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

오류가 있을 수 있습니다.

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

이 경우 테이블에서 사용하는 것과 동일한 조회를 다음과 같이 지정해야 합니다.

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

LIKE 문을 사용하기 전에 CONCAT 함수를 사용하여 해결했습니다.

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

난 괜찮아

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

CONCAT를 사용할 필요 없이 '%'+ 변수 +'%'를 사용하십시오.

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

22년 1월 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 에코: 기능 수준 설명, 멤버십 날짜 설명, 비즈니스 이름별로 BusinessName, MemberNum, Street, City FROM 멤버 WHERE 확인 완료 = TRUE AND businestype Like 'Barber' Order를 선택합니다.

작은 따옴표가 이미 검색값 주위에 있기 때문에 LIKE를 사용하려면 첫 번째 체크 마크 뒤에 %를 받아야 합니다.문자열 치환 함수와 concat 연산자를 조합하여 사용했습니다.원래의 작은 따옴표를 아무것도 사용하지 않고, 검색치를 중심으로 '%'와 '%'를 합성합니다.

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

나한테는 통했어도움이 됐으면 좋겠어요.SQL 주입 보호 기능을 해제하고 있는지 알려주세요.

oracle과 동일한 구문을 사용하는 것이 효과가 있는 것 같습니다.

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

언급URL : https://stackoverflow.com/questions/8537516/how-to-use-an-user-variables-in-mysql-like-clause

반응형