일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 데이터분석
- 데이터구조
- 머신러닝
- 웹개발
- 사이버보안
- 파이썬
- 버전관리
- 2
- 딥러닝
- 네트워크
- 자료구조
- 컴퓨터공학
- 프로그래밍언어
- 보안
- 알고리즘
- 데이터과학
- 소프트웨어공학
- I'm Sorry
- 프로그래밍
- 자바스크립트
- 클라우드컴퓨팅
- 컴퓨터과학
- 컴퓨터비전
- 데이터베이스
- 소프트웨어
- 코딩
- Yes
- 인공지능
- 빅데이터
- 네트워크보안
- Today
- Total
스택큐힙리스트
왜 PHP에서 mysql_* 함수를 사용하면 안 되는가요? 본문
이 게시물을 개선하고 싶다면? 인용과 답변에 대해 자세하게 설명하고, 답변이 올바른 이유를 설명하십시오. 충분한 세부 정보가 없는 답변은 편집 또는 삭제 될 수 있습니다.
왜 mysql_* 함수를 사용하면 안 되는 기술적인 이유가 무엇인가요? (예: mysql_query(), mysql_connect(), 또는 mysql_real_escape_string() 등)
내 사이트에서 작동한다면 왜 다른 것을 사용해야 하나요?
404 Not Found or 500 Internal Server Error?
만약 그들이 내 사이트에서 작동하지 않는다면, 왜 404 Not Found 또는 500 Internal Server Error와 같은 오류가 발생합니까?
경고: mysql_connect(): 파일이나 디렉토리가 없습니다.
답변 1
MySQL 확장기능:
활발한 개발중이 아닙니다.
PHP 5.5 (2013년 6월 출시)에서 deprecated이(가) 공식적으로 사용 가능합니다.
PHP 7.0부터 removed이 완전히 제거되었습니다 (2015년 12월 출시).
이것은 PHP의 모든 지원 버전에 존재하지 않으므로 31 Dec 2018일 때를 의미합니다. 만약 이를 지원하는 PHP 버전을 사용한다면, 보안 문제가 해결되지 않는 버전을 사용하고 있을 것입니다.
OO 인터페이스가 없습니다.
지원하지 않습니다.
비차단, 비동기식 쿼리
파라미터화 된 쿼리 혹은 Prepared statements
저장 프로시저
여러 문장들
거래(transactions)
MySQL 5.6에서 기본적으로 켜져 있으며 5.7에서 필수인 새로운 암호 인증 방법
MySQL 5.1 이후의 새로운 기능 중 어떤 것이든
그것이 사용이 중단되었기 때문에, 그것을 사용하는 것은 당신의 코드를 미래 지향적으로 만들지 않습니다.
준비된 문장에 대한 지원 부족은 외부 데이터를 수동으로 이스케이핑 함수 호출로 이스케이핑하는 것보다 더 명확하고 오류가 적은 인용 방법을 제공하기 때문에 특히 중요합니다.
the comparison of SQL extensions을(를) 보세요.
답변 2
MySQL_* 함수를 사용하지 말아야하는 이유
웹 개발을 하다보면 MySQL 데이터베이스를 사용하게 됩니다. 웹 개발을 하다보면 종종 MySQL_* 함수를 사용하여 데이터베이스와 연동하고 관리하게 됩니다. 그러나 왜 MySQL_* 함수를 사용하지 말아야 하는지에 대해 알아야 합니다.
MySQL_* 함수를 사용하지 말아야 하는 이유는 몇 가지가 있습니다.
첫째, MySQL_* 함수는 PHP 7.0 이후 버전에서 지원되지 않습니다. 이것은 MySQL_* 함수를 사용하는 모든 PHP 애플리케이션이 더 이상 지원되지 않는다는 것을 의미합니다. 이는 보안 문제, 버그 현상 등으로부터 애플리케이션을 보호하는 가장 좋은 방법입니다.
둘째, MySQL_* 함수는 SQL Injection 공격에 취약합니다. 사용자로부터 입력을 받아 데이터베이스 쿼리에 삽입할 경우, MySQL_* 함수는 데이터가 안전하게 인용되지 않기 때문에 취약점을 방치한 채 데이터베이스에 삽입될 수 있습니다.
셋째, MySQL_* 함수는 속도가 느립니다. 이 함수는 데이터베이스 연결을 매번 열고 닫기 때문에 프로그램 성능이 저하됩니다.
넷째, MySQL_* 함수는 보안적이지 않습니다. 이 함수는 악성 공격자가 데이터베이스 추출을 수행하는 것을 용이하게 합니다. 이는 PHP 애플리케이션에 대한 취약점으로 작용할 수 있습니다.
따라서, PHP 7.0 이후 버전에서 MySQL_* 함수는 더 이상 지원되지 않으며, 대신에 PDO (PHP Data Objects)나 MySQLi를 사용하는 것을 권장합니다. PDO와 MySQLi는 데이터베이스와 안전하게 연동하고, 데이터 삽입을 안전하게 수행할 수 있도록 보장합니다.
PDO와 MySQLi는 PHP 7.0 버전부터 지원되는 대안 함수입니다. 이 함수들은 데이터베이스 접근을 보다 안전하게 수행할 수 있도록 도와줍니다. PDO는 데이터베이스 종류에 관계없이 사용될 수 있습니다. MySQLi는 MySQL 서버와의 연결에 특화된 함수입니다.
이러한 이유로 MySQL_* 함수를 사용하지 않는 것을 권장합니다. 보안 문제, SQL Injection 공격 등의 문제 때문에, PDO나 MySQLi를 사용하여 PHP 애플리케이션을 개발하는 것이 좋습니다.