>  기사  >  데이터 베이스  >  PHP에서 MySQL 데이터베이스를 운영할 때 주의할 점

PHP에서 MySQL 데이터베이스를 운영할 때 주의할 점

黄舟
黄舟원래의
2016-12-14 09:29:111290검색

1. 세미콜론 예외
MySQL의 경우 가장 먼저 기억해야 할 것은 각 명령 줄이 세미콜론(;)으로 끝나지만... 절대적인 것은 없습니다. 여기서도 마찬가지입니다. MySQL의 한 줄을 PHP 코드에 삽입할 때 다음 세미콜론을 생략하는 것이 가장 좋습니다. 예:
mysql_query ("INSERT INTO tablename (first_name, last_name)
VALUES ('$first_name' , '$last_name ')
");
이는 PHP도 줄을 세미콜론으로 끝내기 때문입니다. 추가 세미콜론은 때때로 PHP의 구문 분석기를 혼란스럽게 만들어서 생략됩니다. 좋습니다. 이 경우 세미콜론이 생략되었더라도 MySQL 명령을 실행할 때 PHP가 자동으로 이를 추가합니다.

세미콜론을 추가하지 않아도 되는 상황도 있습니다. 일반적인 가로 배열 대신 원하는 필드의 세로 배열을 표시하려면 G를 사용하여 SQL 문 줄을 끝내면 됩니다. 예를 들면 다음과 같습니다.

SELECT * FROM PENPALS WHERE USER_ID = 1G

2. TEXT, DATE, SET 데이터 유형

MySQL 데이터 테이블의 필드에는 데이터 유형이 정의되어 있어야 합니다. 약 25개의 옵션이 있으며 대부분은 간단하며 추가 설명이 필요하지 않습니다. 그러나 언급해야 할 몇 가지 사항이 있습니다.

TEXT는 데이터 유형이 아니지만 일부 책에서는 그렇게 말할 수 있습니다. 실제로는 "LONG VARCHAR" 또는 "MEDIUMTEXT"여야 합니다.

DATE 데이터 유형의 형식은 YYYY-MM-DD입니다(예: 1999-12-08). 날짜 함수를 사용하면 다음 형식으로 현재 시스템 시간을 쉽게 얻을 수 있습니다.

date("Y-m-d")

또한 DATA 데이터 유형 간에 뺄셈을 통해 차이를 얻을 수 있습니다. 시간의 일 수:

$age = ($current_date - $birthdate);

SET은 유용한 데이터 유형이지만 SET은 열거형과 다소 유사합니다. save 여러 값 및 ENUM은 하나의 값만 저장할 수 있습니다. 또한 SET 유형은 최대 64개의 미리 정의된 값만 가질 수 있는 반면 ENUM 유형은 최대 65,535개의 미리 정의된 값을 처리할 수 있습니다. 그리고 64개가 넘는 값을 가진 컬렉션이 필요하다면 어떻게 될까요? 이때 이 문제를 함께 해결하려면 여러 컬렉션을 정의해야 합니다.

3. 와일드카드 문자

SQL에는 "*"와 "%"라는 두 가지 유형의 와일드카드 문자가 있습니다. 다양한 상황에서 사용됩니다. 예: 데이터베이스의 모든 내용을 보려면 다음과 같이 쿼리할 수 있습니다.

SELECT * FROM dbname WHERE USER_ID LIKE '%'; 여기서는 두 와일드카드가 모두 사용됩니다. . 둘 다 어떤 문자열과도 일치한다는 점에서 같은 의미이지만 서로 다른 상황에서 사용됩니다. " * "는 필드 이름을 일치시키는 데 사용되고 " % "는 필드 값을 일치시키는 데 사용됩니다. 알아차리기 쉽지 않은 또 다른 점은 LIKE 키워드와 함께 "%" 와일드카드를 사용해야 한다는 것입니다.

밑줄 "_"인 와일드카드 문자도 있습니다. 위와는 다른 의미를 가지며 단일 문자와 일치하는 데 사용됩니다.

4. NOT NULL 및 빈 레코드

사용자가 아무것도 작성하지 않고 제출 버튼을 누르면 어떻게 되나요? 값이 정말로 필요한 경우 앞서 언급한 대로 데이터 유효성 검사를 위해 클라이언트 측 스크립트나 서버 측 스크립트를 사용할 수 있습니다. 그러나 데이터베이스에서 일부 필드는 공백으로 남겨두고 아무것도 채울 수 있습니다. 이러한 레코드에 대해 MySQL은 다음과 같은 몇 가지 작업을 수행합니다.

기본 작업인 NULL 값을 삽입합니다.
필드 정의에서 NOT NULL을 선언하면(이 필드를 생성하거나 수정할 때) MySQL은 이 필드를 비워두고 아무것도 채우지 않습니다.
ENUM 열거 유형의 필드에 대해 NOT NULL을 선언하면 MySQL은 열거 세트의 첫 번째 값을 필드에 삽입합니다. 즉, MySQL은 열거형 세트의 첫 번째 값을 이 열거형 유형의 기본값으로 사용합니다.

NULL 값을 갖는 레코드와 빈 레코드에는 약간의 차이가 있습니다. % 와일드카드 문자는 빈 레코드와 일치할 수 있지만 NULL 레코드와 일치할 수는 없습니다. 어떤 시점에서는 이러한 구별이 의도하지 않은 결과를 초래할 수 있습니다. 내 경험에 따르면 모든 필드는 NOT NULL 로 선언되어야 합니다. 이런 방식으로 다음 SELECT 쿼리 문이 정상적으로 실행될 수 있습니다:

if (!$CITY) {$CITY = "%";}

$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = 'Liu'
AND LAST_NAME = 'Rufeng'
AND CITY LIKE '$CITY'
");

첫 번째 줄에서 사용자가 그렇지 않은 경우 CITY 값을 지정하면 와일드카드 문자 %가 CITY 변수를 대체하는 데 사용되므로 CITY 필드가 비어 있는 레코드도 검색 중에 CITY 값이 고려됩니다.

그런데 CITY 필드 값이 NULL인 레코드가 있으면 문제가 발생합니다. 위 쿼리에서는 이러한 필드를 찾을 수 없습니다. 문제에 대한 해결책은 다음과 같습니다.

if (!$CITY) {$CITY = "%";}

$selectresult = mysql_query ("SELECT * FROM dbname
WHERE FIRST_NAME = 'Liu'
AND LAST_NAME = 'Rufeng'
AND (CITY LIKE '$CITY' OR CITY IS NULL)
");

NULL을 검색할 때는 "IS" 키워드를 사용해야 하며 LIKE는 제대로 작동하지 않습니다.

마지막으로 언급할 점은 새 필드를 추가하거나 수정하기 전에 이미 데이터베이스에 일부 레코드가 있는 경우 원본 레코드에 새로 추가된 필드의 값이 NULL이거나 비어 있을 수 있다는 것입니다. . 이는 MySQL의 버그로 볼 수 있으므로 이 경우 SELECT 쿼리 사용 시 특히 주의가 필요하다.

위 내용은 PHP에서 MySQL 데이터베이스를 운영할 때 주의사항에 대한 내용입니다. 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

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