PHP에서 PDO의 bindParam() 함수에서 전달하는 데이터 유형을 지정해야하는 이유에 대해 다소 혼란 스럽습니다. 예 :bindParam()에서 매개 변수 유형을 지정해야하는 이유는 무엇입니까?
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();
세 번째 매개 변수를 지정하지 않으면 보안 상 위험 할 수 있습니까?
$sth->bindParam(1, $calories);
$sth->bindParam(2, $colour);
이전 mysql_x 함수에서 $ (id) $ id를 사용하지 않고 $ id를 사용했다면; 그리고 우리가 mysql_real_escape_string ($ id)를 사용했다하더라도 우리는 여전히 SQL injection을 얻을 수있다. 그러나 PDO에서 동일합니까? –
[Prepared statements] (http://en.wikipedia.org/wiki/Prepared_statement)는 쿼리 서버 측을 준비하고 매개 변수를 바인딩하여 MySQL 주입을 피하는 데 도움이됩니다. 그것을하는 당신의 방법은 잘못이 아니었다, 나는 적어도 당신에게 그것을하는 더 쉬운 방법을 보여주고 있었다, 최소한 내 의견으로는. – PLPeeters
두 방법이 모두 올바른 것으로 알고 있습니다. 내가 알고 싶은 것은 예를 들어, 공격자가 $ _POST [ 'id'] = '1 or 3 = 3'과 같은 id 값을 제공하는 경우입니다. 이것은 항상 사실이지만, 이렇게하면 : $ id = (int) $ id; 위의 공격은 일어나지 않습니다. 그래서 내가 알고 싶은 것은 PDO에서 $ _POST [ 'id']를 bindParam() 함수에 넣을 수 있습니까? 그 'id'가 interger라는 것을 명시하지 않고? –