PDO에서 mysql_real_escape_string을 바꾸는 방법: 해결책으로 준비된 명령문?

DDD
풀어 주다: 2024-10-26 05:05:02
원래의
696명이 탐색했습니다.

How to Replace mysql_real_escape_string in PDO: Prepared Statements as the Solution?

PDO에서 mysql_real_escape_string 교체

mysql_*에서 PDO로 전환하는 과정에서 mysql_real_escape_string과 직접적으로 동등한 것이 없어서 딜레마에 직면할 수 있습니다.

직접 등가물 없음

기술적으로 PDO::quote()가 있지만 사용이 제한됩니다. 진정한 해결책은 준비된 문을 올바르게 구현하는 것입니다.

Prepared 문은 주입으로부터 보호

PDO는 준비된 문과 함께 사용될 때 본질적으로 MySQL 주입을 방지합니다. 추가 탈출이 필요합니다. 준비된 문은 입력 매개변수를 자리 표시자에 바인딩하여 악의적인 입력이 SQL 명령으로 해석되는 것을 방지합니다.

예: PDO에서 준비된 문 사용

다음 코드는 보안 데이터베이스를 보여줍니다. 준비된 문을 사용한 쿼리:

<code class="php"><?php
$db = new \PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [
    PDO::ATTR_EMULATE_PREPARES => false,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
if ($_POST && isset($_POST['color'])) {
    $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");
    $stmt->execute(array($_POST['color']));
    $cars = $stmt->fetchAll(\PDO::FETCH_ASSOC);
    var_dump($cars);
}
?></code>
로그인 후 복사

준비된 문의 이점

  • 입력 자동 이스케이프
  • SQL 삽입 방지
  • 보안 및 성능 향상

추가 고려 사항

  • 보안 강화를 위해 DSN 속성에 charset=utf8을 사용하세요.
  • 오류 처리를 위해 PDO 예외(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)를 활성화합니다.
  • 오래된 MySQL 버전(mysql < 5.3.6)을 사용할 경우 추가 조치를 고려하십시오.

결론

PDO의 준비된 문은 mysql_real_escape_string과 같은 함수가 필요 없이 데이터베이스 쿼리를 위한 강력하고 안전한 메커니즘을 제공합니다. 이 접근 방식을 채택하면 SQL 주입을 효과적으로 방지하고 데이터 무결성을 유지할 수 있습니다.

위 내용은 PDO에서 mysql_real_escape_string을 바꾸는 방법: 해결책으로 준비된 명령문?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!