>  기사  >  데이터 베이스  >  MySQL 호출에서 흔히 저지르는 11가지 실수 요약

MySQL 호출에서 흔히 저지르는 11가지 실수 요약

黄舟
黄舟원래의
2017-03-21 13:51:351046검색

많은 초보자의 경우 PHP를 사용하면 단 몇 시간 만에 특정 기능이 포함된 코드를 쉽게 작성할 수 있습니다. 그러나 안정적이고 신뢰할 수 있는 데이터베이스를 구축하려면 어느 정도 시간과 기술이 필요합니다. 다음 글은 mysql을 호출하는 초보자들이 흔히 저지르는 11가지 실수를 정리한 것입니다.

서문

보안 부서로부터 SQL 주입, XSS 공격 취약점 등에 대한 경고 이메일을 자주 받을 수 있습니다. , 가끔 해커들에게 속기도 하고, 우울하신가요? 게다가 데이터베이스 실행 속도가 너무 느리다(경험에 따르면 기본적으로 인덱스를 올바르게 사용하지 않아서 발생한다). MYSQL 초보자들이 흔히 범하는 실수 11가지를 편집기를 따라 살펴보자.

1. InnoDB 대신 MyISAM을 사용하세요

MySQL에는 많은 데이터베이스 엔진이 있는데 일반적으로 MyISAM과 InnoDB를 사용합니다.

MyISAM이 기본적으로 사용됩니다. 그러나 아주 간단한 데이터베이스를 구축하거나 실험적으로 수행하는 것이 아니라면 대부분의 경우 이는 잘못된 선택입니다. MyISAM은 데이터 무결성 보장의 핵심인 외래 키 제약조건을 지원하지 않습니다. 또한 MyISAM은 데이터를 추가하거나 업데이트할 때 전체 테이블을 잠그므로 향후 확장 성능에 큰 문제가 발생할 수 있습니다.

해결책은 간단합니다. InnoDB를 사용하면 됩니다.

2. PHP의 mysql 메소드를 사용합니다.

PHP는 초기 라이브러리부터 MySQL 기능을 제공했습니다. 많은 프로그램이 mysql_connect, mysql_query, mysql_fetch_assoc 등에 의존하지만

PHP 매뉴얼에서는 다음을 권장합니다.

사용 중인 MySQL 버전이 4.1인 경우. 3 그 후에는 mysqli 확장을 사용하는 것이 좋습니다.

mysqli 또는 MySQL의 고급 확장에는 몇 가지 장점이 있습니다.

객체 지향 인터페이스가 있습니다

준비된 명령문, SQL 주입 공격을 효과적으로 방지하고 성능을 향상시킬 수 있음)

다중 문 및 트랜잭션 지원

또한 다중 데이터베이스를 지원하려면 Check를 고려해야 합니다. 아웃 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를 사용하세요

MySQL을 처음 사용하는 경우 가끔 문제가 해결될 수 있습니다. 문제 때로는 익숙한 언어를 먼저 사용하는 것을 고려할 수도 있습니다. 이로 인해 약간의 낭비가 발생하고 성능이 저하될 수 있습니다. 예를 들어, 평균을 계산할 때 MySQL 기본 AVG() 메서드는 사용되지 않습니다. 대신 PHP를 사용하여 모든 값을 루프 한 다음 누적하여 평균을 계산합니다.

SQL쿼리의 PHP 루프에도 주의하세요. 모든 결과를 얻은 후에 PHP를 반복하는 것이 더 효율적인 경우가 많습니다.

일반적으로 대용량 데이터를 처리할 때는 강력한 데이터베이스 방식을 사용하면 효율성을 높일 수 있습니다.

6. 쿼리를 최적화하지 않음

PHP 성능 문제의 99%는 데이터베이스로 인해 발생합니다. 잘못된 규칙입니다. SQL 문은 전체 프로그램을 매우 느리게 만들 수 있습니다. MySQL의 EXPLAIN 문, Query Profiler 및 기타 여러 도구를 사용하면 이러한 잘못된 SELECT를 찾는 데 도움이 될 수 있습니다.

7. 잘못된 데이터 유형 사용

MySQL은 일련의 숫자와 문자 문자열, 시간 등의 데이터 유형 날짜를 저장하려면 DATE 또는 DATETIME 유형을 사용하세요. 정수나 문자열을 사용하면 상황이 더 복잡해집니다.

예를 들어 문자열을 사용하여 직렬화된 PHP 객체를 저장하는 등 자신만의 데이터 유형을 사용하고 싶을 때가 있습니다. 데이터베이스를 추가하는 것은 쉬울 수 있지만 MySQL이 다루기 어려워지고 나중에 문제가 발생할 수 있습니다.

8. SELECT 쿼리에 *

을 사용하여 테이블의 모든 필드를 반환하지 마세요. 이것은 매우 느릴 것입니다. 필요한 데이터 필드만 꺼내면 됩니다. 모든 필드를 제거해야 한다면 테이블을 변경해야 할 수도 있습니다.

9. 과소 색인 또는 과잉 색인

일반적으로 색인은 WHERE 다음에 표시되어야 합니다. SELECT 문 모든 필드.

예를 들어 사용자 테이블에 숫자 ID(기본 키)와 이메일 주소가 있다고 가정해 보겠습니다. 로그인한 후 MySQL은 이메일을 통해 해당 ID를 찾아야 합니다. 인덱싱을 통해 MySQL은 검색 알고리즘을 통해 이메일을 빠르게 찾을 수 있습니다. 인덱스가 없으면 MySQL은 레코드를 찾을 때까지 모든 레코드를 확인해야 합니다.

이 경우 각 필드에 인덱스를 추가하고 싶을 수도 있지만, 이로 인해 업데이트하거나 추가할 때 데이터 양이 많아지면 인덱스가 다시 수행됩니다. 크면 성능 문제가 발생합니다. 따라서 필수 필드만 색인화하십시오.

10. 백업 없음

자주 발생하지는 않지만 데이터베이스가 손상되고 하드 디스크가 손상되거나 서비스가 중지되는 등의 경우 데이터에 치명적인 손상을 초래할 수 있습니다. 따라서 데이터를 자동으로 백업하거나 복사본을 저장해야 합니다.

11. 추가: 다른 데이터베이스는 고려되지 않습니다.

MySQL은 PHP에서 가장 일반적으로 사용되는 데이터베이스일 수 있습니다. , 그러나 이것이 유일한 옵션도 아닙니다. PostgreSQL과 Firebird도 경쟁사이며 둘 다 오픈 소스이며 특정 회사에 의해 통제되지 않습니다. Microsoft는 SQL Server Express를 제공하고 Oracle에는 10g Express가 있으며 이러한 엔터프라이즈 수준 서버에도 무료 버전이 있습니다. SQLite는 일부 소규모 또는 임베디드 애플리케이션에도 좋은 선택입니다.

요약

위 내용은 MySQL 호출에서 흔히 저지르는 11가지 실수 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.