백틱은 테이블 및 열 식별자에 사용되지만 식별자가 MySQL 예약 키워드 이거나 식별자에 공백 문자 또는 한정된 세트를 벗어난 문자가 포함 된 경우에만 필요합니다 (아래 참조). 예약 키워드를 사용하지 않는 것이 좋습니다. 인용 문제를 피하면서 가능하면 열 또는 테이블 식별자로 사용하십시오.
VALUES()
목록 에서와 같이 문자열 값에는 작은 따옴표를 사용해야 합니다. 문자열 값은 MySQL에서 큰 따옴표를 지원하지만 다른 RDBMS에서는 작은 따옴표를 더 널리 사용하므로 큰 따옴표 대신 작은 따옴표를 사용하는 것이 좋습니다.
MySQL은 또한 리터럴 값이 DATE
와 DATETIME
같은 문자열로 작은 따옴표로 묶기를 기대 '2001-01-01 00:00:00'
합니다. 문의 날짜 및 시간 리터럴 하이픈을 사용하여 특정 대안에 자세한 내용은 문서를, -
날짜 문자열에서 세그먼트 구분 기호로.
따라서 예제를 사용하여 PHP 문자열을 큰 따옴표로 묶고 값에 작은 따옴표를 사용합니다 'val1', 'val2'
. NULL
는 MySQL 키워드이며 특수 (비) 값이므로 인용 부호가 없습니다.
이 테이블 또는 열 식별자는 예약어이거나 인용이 필요한 문자를 사용하지 않지만 어쨌든 백틱으로 인용했습니다 (나중에 자세히 설명합니다).
RDBMS에 고유 한 함수 (예 : NOW()
MySQL에서)는 인용 할 수 없지만 인수에 이미 언급 된 동일한 문자열 또는 식별자 인용 규칙이 적용됩니다.
백틱 (`)
테이블 및 열 ───────┐
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
$ query = " 테이블에 삽입하기 (`id`,`col1`,`col2`,`date`,`updated`)
값 (NULL, 'val1', 'val2', '2001-01-01', NOW ()) ";
↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑
따옴표없는 키워드 ─────┴┴┴┘ │ │ │ │ │ │ ││││││
작은 따옴표 ( ') 문자열 ───────────┴────┴──┴────┘ │ │ │││││
작은 따옴표 ( ') 날짜 ─────────────────────────────────── │
따옴표없는 기능
변수 보간
변수의 인용 패턴은 변경되지 않지만 문자열에서 변수를 직접 보간하려는 경우 PHP에서 큰 따옴표를 사용해야합니다. SQL에서 사용하기 위해 변수를 올바르게 이스케이프했는지 확인하십시오. ( SQL 주입을 방지하기 위해 준비된 명령문을 지원하는 API를 대신 사용하는 것이 좋습니다 ).
// 일부 변수 대체와 같은 것
// 여기서 변수 테이블 이름 $ table은 역 따옴표로 묶이고 변수는
// VALUES 목록에서 작은 따옴표로 묶습니다.
$ query = " `$ table '에 삽입 (`id`,`col1`,`col2`,`date`) 값 (NULL, '$ val1 ' , '$ val2 ' , '$ date ' )";
준비된 진술
준비된 진술로 작업 할 때 설명서의 자리 표시자를 인용해야하는지 여부를 확인하려면 설명서를 참조하십시오. PHP, PDO 및 MySQLi에서 사용할 수있는 가장 인기있는 API는 다른 언어에서 가장 준비된 명령문 API와 같이 인용 부호가없는 자리 표시자를 예상 합니다.
// PDO example with named parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (:id, :col1, :col2, :date)";
// MySQLi example with ? parameters, unquoted
$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES (?, ?, ?, ?)";
식별자에서 역 따옴표를 요구하는 문자 :
MySQL 문서에 따르면 다음 문자 세트를 사용하여 식별자를 인용 (백틱) 할 필요가 없습니다.
ASCII : [0-9,a-z,A-Z$_]
(기본 라틴 문자, 숫자 0-9, 달러, 밑줄)
예를 들어 공백을 포함하여 해당 세트 이상의 문자를 테이블 또는 열 식별자로 사용할 수 있지만 인용 부호 (백틱) 를 사용해야 합니다.
"tablename"
것이고 작은 따옴표는 리터럴을위한 것'this is a some text'
입니다. 백틱은 표준 SQL에서 사용되지 않습니다. (식별자에 큰 따옴표를 포함해야하는 경우에는 따옴표로 두 번 입력하십시오"odd""tablename"
. 마찬가지로, 따옴표와 같이 리터럴로 큰 따옴표를 두 번 입력하십시오'Conan O''Brien'
.)