2011-11-28 3 views
0

어떻게 PDO를 사용할 때 mysql_real_escape_string을 사용할 수 없습니까?mysql_real_escape_string()을 호출 할 때 "액세스 거부"오류가 발생하는 문제

try { 
    include "connect_to_db.php"; 

    $sql = sprintf("NULL, '%s'", 
     mysql_real_escape_string('Woot') 
    ); 
    $count = $dbh->exec($sql); 
    $dbh = null; 
    } 
catch(PDOException $e){ 
    echo $e->getMessage(); 
} 

심지어 테스트를 위해 지금 루트 사용자를 사용했지만 여전히 작동하지 않습니다

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in D:\pathhere\file.php on line 44 

는 mysql_real_escape_string가 어디에 오류가 항상 라인에 포인트를 사용할 때 오류가 계속.

+0

가능한 복제본 : http://stackoverflow.com/questions/6384423/mysql-real-escape-string-doesnt-work –

+0

여기에 오류 메시지/코드를 삽입 할 수 있다면 솔루션을 제안하는 것이 더 쉬울 것입니다. – farzad

답변

3

대부분의 mysql_ * 함수는 mysql 연결 리소스를 사용합니다. 이 함수의 documentation에는 실제로 mysql_connect() 리소스가 필요합니다.이 리소스는 PDO를 사용하고 있기 때문에 코드에서 사용할 수 없습니다.

그러나 SQL이 안전한지 확인하려면이 기능을 사용하지 않는 것이 좋습니다. SQL 쿼리에서 매개 변수 create a prepared statement을 사용하여 실행할 수 있습니다. 이 솔루션은 PDO 방식의 쿼리를 사용하며 안전합니다.

업데이트 :

그냥 문자열을해야하는 경우가 PDO를 사용하여 SQL에 대한 이스케이프하기 위해, 당신은 quote() method of the PDO object을 사용할 수 있습니다. 그러나 이렇게하는 것은 일반적인 일이 아닙니다. 대부분의 경우 SQL 쿼리에 대해 문자열을 이스케이프 처리하려는 경우 실제로 쿼리를 실행하려고합니다. 설명서 자체에서 제시하는대로 그렇다면 prepare() method of the PDO object을 사용하는 것이 좋습니다. 자세한 내용은 PDO prepared statements documentation의 예제 섹션을 참조하십시오.

+0

그것이 바로 그 이유입니다. PDO가 변경되면 mysql_real_escape_string은 쓸모 없게됩니다. mysql_real_escape_string이나 다른 사람들이 사용하는 것과 비슷한 PDO 대안이 있습니까? – enchance

+0

@enchance : 댓글에서 질문을 설명하는 답변을 업데이트했습니다. – farzad

관련 문제