복붙노트

[SQL] 나는 바인드 매개 변수 경우는 mysql_real_escape_string를 사용해야합니까?

SQL

나는 바인드 매개 변수 경우는 mysql_real_escape_string를 사용해야합니까?

나는 다음과 같은 코드가 있습니다 :

function dbPublish($status)
{
 global $dbcon, $dbtable;

 if(isset($_GET['itemId']))
 {
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
  $stmt = $dbcon->prepare($sqlQuery);
  $stmt->bind_param('ii', $status, $_GET['itemId']);
  $stmt->execute();
  $stmt->close();
 }
}

나는이 경우는 mysql_real_escape_string에 필요하거나 난 괜찮아 오전합니까?

해결법

  1. ==============================

    1.DB를 엔진 자체가 그렇게 할 것입니다 : 아니, 당신은 당신이 준비된 문을 사용하는 경우 자신이, (즉, 어떤 당신이 전화 mysqli_real_escape_string 할 필요가 없습니다) 값을 이스케이프 할 필요가 없습니다.

    DB를 엔진 자체가 그렇게 할 것입니다 : 아니, 당신은 당신이 준비된 문을 사용하는 경우 자신이, (즉, 어떤 당신이 전화 mysqli_real_escape_string 할 필요가 없습니다) 값을 이스케이프 할 필요가 없습니다.

    (당신이 mysql_real_escape_string를 호출하고 바인딩 매개 변수를 사용한다면 사실, 당신의 문자열은 두 번 탈출받을 것 - 위대한하지 않을 것이다 : 당신은 모든 곳에서 탈출 문자로 끝날 것 ...)

    당신의 가치는 당신이 인 mysql_real_escape_string를 호출 할 필요가 없습니다 것입니다, 그래서 당신은 준비된 문을 사용하지 않는 경우에도,합니다 ( 'II'로 표시) 정수로 전달됩니다하십시오 (!) 참고로 그 이름에서 알 수 있듯이,이 기능은 탈출하는 데 사용됩니다 ... 문자열.

    정수, 나는 일반적으로 그냥 내 SQL 쿼리에 삽입해야합니다 데이터 정말 정수가를 만들기 위해 INTVAL 사용합니다.

    (당신이 준비가 쿼리를 사용하지만, 다시 한번, 당신은 자신을 탈출의 종류를 할 필요가 없습니다)

  2. ==============================

    2.아니, 당신은하지 않아야합니다. 두 가지를 결합하면 될 것이다 볼 이스케이프 문자 데이터에 표시.

    아니, 당신은하지 않아야합니다. 두 가지를 결합하면 될 것이다 볼 이스케이프 문자 데이터에 표시.

  3. ==============================

    3.

    function dbPublish($status)    
    {    
     global $dbcon, $dbtable;    
    
     if(isset($_GET['itemId']))    
     {    
      $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';    
      $stmt = $dbcon->prepare($sqlQuery);    
      $stmt->bind_param('ii', $status, $_GET['itemId']);    
      $stmt->execute();    
      $stmt->close();    
     }    
    }   
    
  4. from https://stackoverflow.com/questions/2284317/do-i-have-to-use-mysql-real-escape-string-if-i-bind-parameters by cc-by-sa and MIT license