Download presentation
Presentation is loading. Please wait.
1
Prepared Statements CSED421: Database Systems Labs
2
SQL states have static and variable parts
SELECT * FROM JokeBoard WHERE title LIKE '%공대생%'; SELECT * FROM Animal WHERE age > 5; 고정된 부분을 재활용할 수 있도록 미리 저장해두고 필요한 값만 바꿔서 사용(caching query parsing)
3
Prepare and execute statements
PREPARE <stmt_name> FROM <preparable_stmt>; = <value>; EXECUTE …];
4
> PREPARE stmt1 FROM 'SELECT SQRT(POW(. ,2) + POW(
> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; > = 3; > = 4; > EXECUTE result: hypotenuse = 5 > = 5; > = 12; > EXECUTE result: hypotenuse = 13 > = 580; > = 741; > EXECUTE result: hypotenuse = 941
5
Deallocate prepare statements
DEALLOCATE PREPARE <stmt_name>; DROP PREPARE <stmt_name>; 또는 같은 이름으로 PREPARE 할 경우 기존 것은 없어짐 DEALLOCATE PREPARE stmt1;
6
SQL Injection
7
SQL Injection Article[] SearchJokeBoard(String keyword) { String query = "SELECT * FROM JokeBoard WHERE title LIKE '%" + keyword + "%';"; DBMS.run(query); … } What happen if keyword is "x'; DROP TABLE Users; -- "; SELECT * FROM JokeBoard WHERE title LIKE '%x'; DROP TABLE Users; -- %'; If you use the prepared statement, SELECT * FROM JokeBoard WHERE title LIKE '%x\'; DROP TABLE Users; -- %'; So, use prepare statement to prevent some SQL Injections.
9
Practice 1. EMP 테이블에서 이름에 ‘R’이 포함되는 사람의 이름을 출력
2. EMP 테이블에서 이름을 검색할 수 있는 statement를 작성하고 ‘R’이 포함되는 사람의 이름을 출력 3. EMP 테이블에서 SAL과 COMM의 합이 특정 값 이상인 사람의 이름을 출력하는 statement를 작성하고 1000 이상, 2000 이상, 3000 이상을 각각 출력
Similar presentations