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
'programing' 카테고리의 다른 글
저장된 CSV에 Python/Pandas가 인덱스를 생성하지 않도록 하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
---|---|
MySQL에서는 그룹 코드당 상위 N에 대한 쿼리가 작동하지만 Maria에서는 결과가 다릅니다.DB (0) | 2022.09.23 |
'for' 루프에서 인덱스 액세스 (0) | 2022.09.23 |
자바처럼 C#에 shrows 키워드가 있나요? (0) | 2022.09.22 |
Python 문자열을 공백으로 채우려면 어떻게 해야 하나요? (0) | 2022.09.22 |