본문 바로가기

Web

[Express] mySQL ?와 SET query

목표: MySql에서 date type을 boolean으로 받는 테이블에 express.js와 form을 활용하여 POST 요청

tinyint(0, 1)에서 0은 false, 1은 true를 의미한다.


A. boolean 값을 다룰 수 있는 input type으로 checkbox를 활용하였다.

<body>
    <form action="/post" method="post">
        이름: <input type="text" name="name" placeholder="이름">
        <br><br>
        나이: <input type="number" name="age" placeholder="1">
        <br><br>
        <div>
            희망 역할:
            <input type="checkbox" name="frontend"> Frontend
            <input type="checkbox" name="backend"> Backend
        </div>
        <br><br>
        <input type="submit" value="전송하기">
    </form>
</body>


B. router.post에서 `req.body` 와 `?`, `SET` 구문을 활용하여 전송

router.post("/", (req, res) => {
    get_PoolConnect((connection) => {
        const user = {
            name: req.body.name,
            age: Number(req.body.age),
            frontend: req.body.frontend === 'on' ? 1 : 0,
            backend: req.body.backend === 'on' ? 1 : 0
        }
        connection.query('insert into role SET ?', user, (err, results, fields) => {
            if (err) throw err;
            console.log(results);
            res.redirect('/list')
        })
        connection.release();
    })
})

1) ` ? `

?는 쿼리에 변수를 담는 방식으로 query문 다음 파라미터에 ?에 해당하는 변수를 넣으면 된다.

 

 

2) ` SET `

SET는 row를 INSERT할 때 모든 컬럼 값을 묶어서 넣겠다는 의미로 쓰입니다. 

`SET ?`가 같이 쓰이면서 query문 다음 파라미터인 user 변수는 table의 모든 column을 담아야합니다.

 

 

3) req.body + <checkbox>

<checkbox> Tag는 check되었을 때 'on', 아닐 때는 NULL을 전송한다. 

각 column에 입력될 값을 삼항연산자를 통해 tinyint 타입으로 변경해주었다.