• PHP 보안코딩 - Prepared Statements MYSQL 샘플 소스

    2019. 2. 13.

    by. Yo.

    728x90

    Prepared Statements MYSQL 샘플 소스코드

    기본적으로 보안을 위해 사용한다고만 알고있었으나 


    w3schools 자료를 보면 Prepared Statements 는 3가지 장점을 갖습니다.


    1. 준비된 명령문은 쿼리 준비가 한 번만 수행되므로 구문 분석 시간을 줄입니다 (명령문이 여러 번 실행 되더라도)

    2. 바인딩 된 매개 변수는 전체 쿼리가 아닌 매번 매개 변수 만 보내야하므로 서버 대역폭을 최소화합니다.

    3. Prepared statements는 나중에 다른 프로토콜을 사용하여 전송되는 매개 변수 값이 올바르게 이스케이프 될 필요가 없으므로 SQL injection에 매우 유용합니다. 원래 명령문 템플리트가 외부 입력에서 파생되지 않으면 SQL 삽입이 발생할 수 없습니다.
    $dbconn = new mysqli("디비 주소", "아이디", "비번", "디비명");
    
    if ($dbconn->connect_errno) {
        echo "Failed to connect to MySQL: (" . $dbconn->connect_errno . ") " . $dbconn->connect_error;
    }
    
    if (!$dbconn->query("DROP TABLE IF EXISTS test") ||
        !$dbconn->query("CREATE TABLE test(id INT, label CHAR(1))") ||
        !$dbconn->query("INSERT INTO test(id, label) VALUES (1, 'a')")) {
        echo "Table creation failed: (" . $dbconn->errno . ") " . $dbconn->error;
    }
    
    
    $stmt = $dbconn->prepare("select a,b,c from tbl where a like CONCAT('%',?,'%') ");
    $id = "abc";
    
    $stmt->bind_param('s', $id);
    $stmt->execute();
    
    $stmt->bind_result($a, $b, $c);
    
    
    //$stmt->fetch();  
    
    while ($stmt->fetch()) {
    	echo $a ."//".$b."//".$c;
    }
    
    
    $stmt->close();
    $dbconn->close();
    



    참고 사이트 : 

    https://www.w3schools.com

    http://php.net

    https://stackoverflow.com

    https://ko.wikipedia.org

    728x90

    댓글