본문 바로가기
MySql

MySQL PDO를 사용하여 MYSQL Select의 PHP 변수

by 베이스 공부 2021. 1. 24.
반응형

가능한 중복 :


이 기능을 사용하여 데이터베이스에서 중복을 찾으려고하는 초보자입니다.

function uni($field, $value) {
        $sql= "SELECT * FROM user WHERE ".$field." = '".$value."'";
        $result = $pdo->query($sql);
        $rows = $result->fetchAll(PDO::FETCH_COLUMN, 1);
        return count($rows);
    }

$username = $_POST['username']; 
$result = uni("username", $username);

... 내가 단단한 무언가에 머리를 부딪 히려고합니다. 어떤 이유로 쿼리가 결과를 반환하지 않으며 그 이유를 모르겠습니다.

 

해결 방법

 

좋습니다. PDO 를 사용하고 있습니다. 하지만 스 니펫은 여전히 ​​인젝션 공격에 노출되어 있습니다. 원시 사용자 입력을 쿼리에 전달하고 있습니다. 또한 발견 된 행의 개수 만 원하는 경우 SELECT * 를 사용하지 말고 전체 결과 집합을 FETCH하지 하여 개수를 세지 마십시오!

function uni($field,$value)
{
    $db = new PDO();//make connection, which you don't seem to do
    //or (not so good approach):
    //global $db;
    //Best approach would be to pass the connection to the function, as an extra argument, though
    $stmt = $db->prepare('SELECT '.$field.' FROM user WHERE '.$field.' = :value');
    if ($stmt->execute(array(':value' => $value)))
    {
        return $stmt->rowCount();
    }
    //query failed, throw errors or something
}


function uni($field,$value,$db)
{
    $stmt = $db->prepare('SELECT '.$field.' FROM user WHERE '.$field.' = :value');
    if ($stmt->execute(array(':value' => $value)))
    {
        return $stmt->rowCount();
    }
    return false;
}
$username = $_POST['username']; 
$result = uni('username', $username,$pdo);//<--pass connection

 

참조 페이지 https://stackoverflow.com/questions/12818696

 

 

반응형

댓글