집 >데이터 베이스 >MySQL 튜토리얼 >꼭 봐야 할 것! PHP 개발자가 저지르는 MySQL 실수 10가지
1. InnoDB 대신 MyISAM을 사용하세요
MySQL에는 많은 데이터베이스 엔진이 있으며 일반적으로 MyISAM과 InnoDB가 사용됩니다.
MyISAM이 기본적으로 사용됩니다. 그러나 아주 간단한 데이터베이스를 구축하거나 실험적으로 수행하는 것이 아니라면 대부분의 경우 이는 잘못된 선택입니다.
MyISAM은 데이터 무결성 보장의 핵심인 외래 키 제약 조건을 지원하지 않습니다. 또한 MyISAM은 데이터를 추가하거나 업데이트할 때 전체 테이블을 잠그므로
향후 확장 성능에 큰 문제가 발생할 수 있습니다.
해결책은 간단합니다. InnoDB를 사용하세요. 하지만 여기서는 주로 MyISAM
2을 사용합니다. PHP의 mysql 메서드를 사용합니다
PHP는 처음부터 MySQL 함수 라이브러리를 제공했습니다. 많은 프로그램이 mysql_connect, mysql_query, mysql_fetch_assoc 등에 의존하지만 PHP 매뉴얼
에서는 다음을 권장합니다.
사용 중인 MySQL 버전이 4.1.3 이후인 경우 강력하게 권장됩니다. mysqli 확장을 사용하는 것이 좋습니다.
mysqli 또는 MySQL의 고급 확장에는 몇 가지 장점이 있습니다.
객체 지향 인터페이스가 있습니다.
준비된 명령문(준비된 명령문, 효과적으로 SQL 주입 공격을 방지하고 성능을 향상시킬 수 있습니다)
다중 문 및 트랜잭션 지원
또한 다중 데이터베이스를 지원하려면 PDO를 고려해야 합니다.
3. 사용자 입력을 필터링하지 않음
은 다음과 같아야 합니다. 사용자 입력을 신뢰하지 마세요. 백엔드 PHP를 사용하여 각 입력 정보를 확인하고 필터링합니다. Javascript를 신뢰하지 마십시오. 다음과 같은 SQL 문은 쉽게 공격받을 수 있습니다.
$username = $_POST["name"]; $password = $_POST["password"]; $sql = "SELECT userid FROM usertable WHERE username='$username'AND password='$password';"; // run query...
이와 같은 코드는 사용자가 "admin';"을 입력하면 다음과 동일합니다.
SELECT userid FROM usertable WHERE username='admin';# 🎜🎜##🎜🎜 #
이 방법으로 침입자는 비밀번호를 입력하지 않고도 관리자로 로그인할 수 있습니다. 4. UTF-8을 사용하지 마세요
영국과 미국 국가의 사용자는 언어 문제를 거의 고려하지 않으므로 다른 곳에서는 사용할 수 없는 제품이 많습니다. 만능인. 많은 문제를 일으키는 GBK 인코딩도 있습니다.
UTF-8은 많은 국제화 문제를 해결합니다. PHP6은 이 문제를 더 완벽하게 해결할 수 있지만 MySQL의 문자 집합을 UTF-8로 설정하는 것을 막지는 않습니다.
5. SQL을 사용해야 하는 곳에는 PHP를 사용하세요SQL 쿼리의 PHP 루프에도 주의하세요. 일반적으로 모든 결과를 얻은 후에 PHP를 반복하는 것이 더 효율적입니다.
일반적으로 대용량 데이터를 처리할 때는 강력한 데이터베이스 방식을 사용하면 효율성을 높일 수 있습니다.
Profiler 및 기타 여러 도구를 사용하면 이러한 잘못된 SELECT를 찾는 데 도움이 될 수 있습니다.
7. 잘못된 데이터 유형 사용
때때로 자신이 정의한 데이터 유형을 사용하고 싶을 때가 있습니다. 예를 들어 문자열을 사용하여 직렬화된 PHP 개체를 저장합니다. 데이터베이스를 추가하는 것은 쉬울 수 있지만 그렇게 하면 MySQL이
다루기 어려워지고 나중에 문제가 발생할 수 있습니다.
8. SELECT 쿼리에 *를 사용하세요. 필요한 데이터 필드만 꺼내면 됩니다. 모든 필드를 제거해야 하는 경우 테이블을
변경해야 할 수도 있습니다.
9. 과소 색인 또는 과잉 색인
일반적으로 SELECT 문에서 WHERE 뒤에 나타나는 모든 단어 인덱스 필드여야 합니다. 예를 들어 사용자 테이블에 숫자 ID(기본 키)와 이메일 주소가 있는 경우입니다. 로그인한 후 MySQL은 이메일을 통해 해당 ID를 찾아야 합니다. 인덱싱을 통해 MySQL은
이 경우 각 필드에 인덱스를 추가하고 싶을 수도 있지만 이로 인해 업데이트하거나 추가하면 데이터 양이 많을 때 인덱스가 다시 작성됩니다
# 🎜🎜 #, 성능 문제가 있을 것입니다. 따라서 필수 필드만 색인화하십시오.10. 백업 없음
위 내용은 꼭 봐야 할 것! PHP 개발자가 저지르는 MySQL 실수 10가지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!