2012-12-13 5 views
0

로그인 인증 부분에 다음과 같은 코드가 있습니다. 그것은 모든 MySQL의에 있었고, 나는 그래도 오류가odbc 쿼리에 문제가 발생했습니다.

를 ODBC 그것을 변환하기 위해 최선을했다 : $row = $query->odbc_assoc();에 있어야 내가

$connection = odbc_connect("Driver={SQL Server};Server=$host;Database=$database;",$uid, $passVal) or die("Connection could not established"); 

$query = $connection->'SELECT Level_access FROM users WHERE ID = "'.$connection->addslashes($_SESSION['user_id']).'"'; 
$row = $query->odbc_assoc(); 

$connection->close(); 

사람이 확인할 수 있습니다, 그것은 될 수 완전히 잘못된

를 추측 비록 작성되었습니다. 질문 : odbc 연결에서 addslashes와 동일한 mysql_escape_string입니까?

감사

+0

어떤 오류가 발생합니까? – Leri

+0

결과 : 구문 분석 오류 : 예기치 않은 T_CONSTANT_ENCAPSED_STRING, T_STRING 또는 T_VARIABLE 또는 '{'또는 '$'여기에 $ query = $ connection -> 'SELECT Level_access from WHERE ID = "'구문 오류, $ connection-> addslashes ($ _ SESSION [ 'user_id']). ' "'; –

답변

0

Question: is mysql_escape_string equivalent to addslashes in odbc connection?

아니, 및 addslashes결코 적합한 도구입니다! 문자 세트의 간단한 조작을 통해, addslashes가 생성하는 단순 이탈 레이어를 우회하는 것은 놀랍지 않게 사소한 일입니다. 여전히 SQL injection까지 와이드 오픈합니다. 또한, mysql_real_escape_string은 MySQL 전용이며, 선언 된 문자 세트가있는 열린 MySQL 연결로 올바르게 작동합니다.

구문이 완전히 이상하지 않다는 사실을 알기 시작하지 않습니다. odbc_connect은 객체가 아닌 자원을 반환합니다. 메소드를 호출하려고하면 스크립트를 죽이는 것 외에는 아무 것도 할 수 없습니다.

OBDC를 사용하여 sqlsrv extension과 같은 최신 SQL 대신 연결할 경우 PDOPDO_ODBC으로 사용하십시오. 이 두 가지 옵션 모두 보통 prepared statements with parameterized queries을 제공하며 SQL 인젝션에 대한 효과적인 방어 수단입니다. Sqlsrv의 준비된 문은 서버에서 실행됩니다. PDO는 서버가 아닌 내부적으로 수행됩니다. 연결 문자열에 연결 문자 집합을 전달하고 함께 전달할 모든 사용자 데이터가 올바른 charset에 있는지 확인하십시오. 그러면 괜찮을 것입니다.

관련 문제