5.0MySQL에서 저장 프로 시저의 준비된 문에 정수 목록을 전달하는 방법은 무엇입니까?
CREATE TABLE `locationcodes` (
`id` int,
`customer` varchar(100),
`locationcode` varchar(50),
`parentid` int
);
insert into locationcodes values (1, 'Test, Inc.', 'California', NULL);
insert into locationcodes values (2, 'Test, Inc.', 'Los Angeles', 1);
insert into locationcodes values (3, 'Test, Inc.', 'San Francisco', 1);
insert into locationcodes values (4, 'Test, Inc.', 'Sacramento', 1);
저장 프로 시저 :
CREATE PROCEDURE test (_location VARCHAR(100))
BEGIN
SET @location = _location;
SET @select='
SELECT id, locationcode
FROM locationcodes
WHERE customer="Test, Inc."
AND id in (?)
';
PREPARE stmt FROM @select;
EXECUTE stmt USING @location;
DEALLOCATE PREPARE stmt;
END
통화 절차 :
가call test('2, 3')
결과 :
2, Los Angeles
결과는 한 행,하지만 난 올릴 때 두 줄이 좋아. 문제는 준비된 문이 인수가 varchar임을 확인하고 따라서 값을 따옴표로 묶습니다. IN 문을 만들 수 있도록 따옴표를 사용하지 않는 것이 좋습니다. 어떻게 수행 할 수 있습니까? 이상적으로 MySQL은 ints 데이터 유형 목록을 가지고 있으므로 varchar를 사용할 필요는 없지만 존재하지 않습니다.
SQL 주입 공격을 막기 위해 준비된 문구를 유지해야합니다.