문제

PHP와 동일한 기능이 있는지 알려주시겠습니까? mysql_real_escape_string() Perl의 경우 DBI 기준 치수?

도움이 되었습니까?

해결책

당신은 사용해야합니다 자리 표시 자 및 바인딩 값.

다른 팁

하지 않다. 탈출하다. SQL.

하지 않다. 인용하다. SQL.

SQL 자리 표시 자/매개 변수 사용 (?). SQL 문의 구조와 자리 표시자가 나타내는 데이터 값은 데이터베이스로 완전히 별도로 전송되므로 (데이터베이스 엔진 또는 DBD 모듈의 버그를 제외하고) 데이터 값을 SQL로 해석 할 수있는 방법은 전혀 없습니다. 명령.

my $name = "Robert'); DROP TABLE Students; --";
my $sth = $dbh->prepare('SELECT id, age FROM Students WHERE name = ?');
$sth->execute($name);  # Finds Little Bobby Tables without harming the db

부수적 인 이점으로, 자리 표시자를 사용하는 경우 SQL 문을 재사용하는 경우 (한 번만 준비해야 함) 더 효율적이며 그렇지 않은 경우 (명시 적으로 전화하지 않더라도 여전히 전화를 걸지 않더라도 여전히 얻는 경우 여전히 얻는다. 쿼리가 실행되기 전에 암시 적으로 호출).

처럼 인용하다?

또한 문서를 읽는 것이 좋습니다 dbd :: mysql UTF8에 대해 걱정하는 경우.

에서 http://www.stonehenge.com/merlyn/unixreview/col58.html :

  use SQL::Abstract;
  ... 
  my $sqa = SQL::Abstract->new;
  my ($owner, $account_type) = @_; # from inputs
  my ($sql, @bind) = $sqa->select('account_data', # table
                                  [qw(account_id balance)], # fields
                                  {
                                    account_owner => $owner,
                                    account_type => $account_type
                                  }, # "where"
                                 );
  my $sth = $dbh->prepare_cached($sql); # reuse SQL if we can
  $sth->execute(@bind); # execute it for this query

데이터베이스 핸들 방법 "견적"

my $dbh = DBI->connect( ... );
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
          $dbh->quote("Don't");

http://metacpan.org/pod/dbi#quote

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top