MySQL에서 작은따옴표, 큰따옴표 및 백틱을 사용하는 경우
나는 질의서를 쓰는 가장 좋은 방법을 배우려고 한다.나도 일관성이 중요하다는 것을 이해한다.저는 지금까지 아무 생각 없이 작은 따옴표, 큰따옴표, 뒷따옴표를 무작위로 사용해 왔습니다.
예:
$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';
위의에서는, 「아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.table,col1,val1 일 수 .
이것은 어떤 기준입니까?무슨 일을 하세요?
비슷한 질문에 대한 답변을 20분 정도 읽고 있지만, 이 질문에 대한 확실한 답은 없는 것 같습니다.
백틱은 테이블 및 열 식별자에 사용되지만 식별자가 MySQL 예약 키워드이거나 식별자에 공백 문자 또는 제한된 집합을 초과하는 문자가 포함된 경우에만 필요합니다(아래 참조).가능하면 예약 키워드를 열 또는 테이블 식별자로 사용하지 않고 견적 문제를 피하는 것이 좋습니다.
.VALUES()리스트. 큰따옴표는 문자열 값도 MySQL에서 지원하지만 작은따옴표는 다른 RDBMS에서 더 널리 받아들여지기 때문에 큰따옴표를 사용하는 것이 좋습니다.
도 MySQL이 필요합니다.DATE ★★★★★★★★★★★★★★★★★」DATETIME은 ""와 같은 됩니다.'2001-01-01 00:00:00'하이픈을 사용하는 방법에 대한 자세한 내용은 날짜 및 시간 리터럴 문서를 참조하십시오.-날짜 문자열에서 세그먼트 구분 기호로 사용합니다.
값 "PHP"에합니다.'val1', 'val2'NULL는 MySQL 키워드이며 특별한(비) 값이기 때문에 따옴표로 묶지 않습니다.
이러한 표 또는 열 식별자는 모두 예약어이거나 따옴표가 필요한 문자를 사용하지 않지만, 어쨌든 backticks(자세한 내용은 나중에...)로 인용했습니다.
를 들어 RDBMS " " " " ( " ) :NOW()MySQL에서)는 따옴표로 묶으면 안 됩니다.단, 이러한 인수는 이미 언급한 것과 동일한 문자열 또는 식별자 따옴표로 묶어야 합니다.
되돌아가기(')테이블 & 컬럼 ------------------------------------------------------------------------------------------------------------------------------↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓$120 = "INSERT INTO 'table'('id', 'col1', 'col2', 'date', 'col') 값(NULL, 'val1', 'val2', '2001-01-01', NOW();↑↑↑↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑↑↑↑↑unquoted 키워드 ----- " " " 입니다.따옴표로 묶인(') 문자열 --------------------------------------------------------------------------------------------------------따옴표(')로 묶은 날짜 ----------------------------------------------------------------------------------------------------------------따옴표가 없는 함수 --------------------------------------------------------------------------------------------------------
변수 보간
변수의 따옴표 패턴은 변경되지 않지만 변수를 문자열에 직접 삽입하려면 PHP에서 이중 따옴표로 묶어야 합니다.SQL에서 사용할 수 있도록 변수를 올바르게 이스케이프했는지 확인하십시오(대신 SQL 주입에 대한 보호를 위해 준비된 문을 지원하는 API를 사용하는 것이 좋습니다).
// 일부 변수 치환에서도 동일// 여기서 변수 테이블 이름 $table은 백틱 따옴표로 묶고 변수는// VALUES 목록의 // 따옴표는 작은따옴표로 묶음$val = "INSERT INTO '$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 (?, ?, ?, ?)";
식별자에 backtick 따옴표가 필요한 문자
MySQL 문서에 따르면 다음 문자 집합을 사용하여 식별자를 따옴표로 묶을 필요가 없습니다.
ASCII:
[0-9,a-z,A-Z$_]문자,0-9', '0-9', '0-9', '0-9', '0-9', '0')
예를 들어 공백 등 테이블 또는 열 식별자로 이 세트를 초과하는 문자를 사용할 수 있지만 따옴표로 묶어야 합니다.
또한 숫자는 식별자에 유효한 문자이지만 식별자는 숫자로만 구성될 수 없습니다.만약 그들이 한다면 그들은 반드시 백 틱으로 싸여야 한다.
MySQL에는 다음 두 가지 유형의 따옴표가 있습니다.
'리터럴을 동봉하는 경우`이나 를 동봉하는
다음에 '아예'라는 게 있어요."특별한 경우죠MySQL 서버에 따라 위의 목적 중 하나로 동시에 사용할 수 있습니다.
- 디폴트로는
"할 수 .' - 모드일 경우
"할 수 있습니다.`
다음 쿼리는 SQL 모드에 따라 다른 결과(또는 오류)를 생성합니다.
SELECT "column" FROM table WHERE foo = "bar"
ANSI_QUOTES 사용 안 함
리터럴을 합니다."column" 컬럼. 여기서 "는foo과 같다"bar"
ANSI_QUATES 활성화
쿼리는 합니다.column 컬럼. 여기서 "는foo과 bar
무엇을 사용할 때
- 하지 않는 이 좋습니다.
"코드가 SQL 되게 됩니다. - 모범 사례이므로 항상 식별자를 인용하십시오(SO에 대한 몇 가지 질문 참조).
(상기에서는 질문의 SQL 특성에 대한 좋은 답변이 있지만, PHP를 처음 사용하는 경우에도 해당될 수 있습니다.)
PHP는 단일 따옴표 문자열과 이중 따옴표 문자열을 다르게 처리하는 것이 중요합니다.
따옴표로 묶은 문자열은 '리터럴'이며 거의 위시위그 문자열입니다.이중 따옴표로 묶인 문자열은 가능한 변수 대체를 위해 PHP에 의해 해석됩니다(PHP의 백틱은 정확히 문자열이 아닙니다. 셸에서 명령을 실행하고 결과를 반환합니다).
예:
$foo = "bar";
echo 'there is a $foo'; // There is a $foo
echo "there is a $foo"; // There is a bar
echo `ls -l`; // ... a directory list
으로 '백틱'을 나타낼 때 합니다.identifier또한 실수로 Reserved 키워드를 사용하지 않도록 주의해 주십시오.
예를 들어 다음과 같습니다.
Use `database`;
가 이 내용을 할 수 .database는 데이터베이스 ID가 아닌 데이터베이스의 이름입니다.
테이블 이름과 필드 이름에 대해서도 동일한 작업을 수행할 수 있습니다.이것은 데이터베이스 ID를 백틱으로 랩하는 경우 매우 좋은 습관입니다.
백틱에 대한 자세한 내용은 이 답변을 참조하십시오.
이제 큰따옴표와 작은따옴표에 대해서 말씀드리겠습니다(마이클이 이미 언급했습니다).
단, 값을 정의하려면 작은따옴표 또는 큰따옴표를 사용해야 합니다.다른 예를 보겠습니다.
INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, title1);
.title1「 」입니다가 「 」를 합니다.title1열 이름(예: 식별자)으로 지정합니다.따라서 값을 나타내려면 큰따옴표 또는 작은따옴표를 사용해야 합니다.
INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, 'title1');
이제 PHP와 함께 큰따옴표와 작은따옴표를 사용하면 쿼리 작성 시간이 훨씬 쉬워집니다.질문에서 수정된 쿼리 버전을 보겠습니다.
$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";
"PHP"를 만듭니다.$val1 , , , , 입니다.$val2값을 사용하여 완전히 유효한 쿼리를 만듭니다.
$val1 = "my value 1";
$val2 = "my value 2";
$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";
만들 것이다
INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, 'my value 1', 'my value 2')
가 MySQL의 쿼리를 구분하기 위해 됩니다.` ," ,' ★★★★★★★★★★★★★★★★★」().
"★★★★★★★★★★★★★★★★★」'값 "을 둘러싸는 데 됩니다."26-01-2014 00:00:00"★★★★★★★★★★★★★★★★★」'26-01-2014 00:00:00'이이지, 문자열과 같은now,sum, 「」max.`컬럼명을 위해 를 들어, 다음과 같습니다.select `column_name` from `table_name` where id='2'(★★★★★★★★★★★★★★★★★」)질의의 일부만 포함하면 됩니다.select `column_name` from `table_name` where (id='2' and gender='male') or name='rakesh'.
MySQL과 PHP의 문자열 리터럴은 동일합니다.
문자열은 바이트 또는 문자의 시퀀스로, 작은따옴표("") 또는 큰따옴표("") 문자로 묶습니다.
따라서 문자열에 작은 따옴표가 포함되어 있는 경우 큰따옴표를 사용하여 문자열을 따옴표로 묶거나 큰따옴표가 포함된 경우 작은따옴표를 사용하여 문자열을 따옴표로 묶을 수 있습니다.단, 스트링에 작은 따옴표와 큰 따옴표가 모두 포함되어 있는 경우에는 스트링을 따옴표로 묶은 것을 이스케이프해야 합니다.
대부분의 경우 SQL 문자열 값에는 작은 따옴표를 사용하기 때문에 PHP 문자열에는 큰 따옴표를 사용해야 합니다.
$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, 'val1', 'val2')";
또한 PHP의 큰따옴표로 묶인 문자열에 변수를 사용할 수 있습니다.
$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, '$val1', '$val2')";
, 만약 ★★★★★★★★★★★★★★★★.$val1 ★★★★★★★★★★★★★★★★★」$val2에는 작은 따옴표가 포함되어 있어 SQL이 잘못될 수 있습니다.하기 전에 이 .SQL은 이 을 사용합니다.mysql_real_escape_string가 더
여기에는 많은 도움이 되는 답변이 있으며, 일반적으로 두 가지 요점으로 귀결됩니다.
- BACKTIKS(')는 식별자 이름 주위에 사용됩니다.
- 단일 따옴표()는 값 주위에 사용됩니다.
그리고 @MichaelBerkowski가 말했듯이
식별자에 가 '알겠습니다'인 합니다.
MySQL키워드 또는 참조)를 초과하는 되어 있는 경우 reserved ID(예약 완료)는 가능한 한 또는 이 좋습니다. 문제를 회피할 것을 합니다.가능하면 예약 키워드를 열 또는 테이블 식별자로 사용하지 않고 견적 문제를 피하는 것이 좋습니다.
그러나 ID는 예약된 키워드이거나 공백 또는 제한된 설정을 초과하는 문자를 포함할 수 없지만 반드시 백틱이 필요한 경우가 있습니다.
예
123E10이기도 합니다.INTEGER문자 그대로의
에 대해서는 하지 않고 [] [아이디] [아이디] [아이디] [아이디] [아이디] [아이디] [아이디] [아이디] [아이엠 템포러리]테이블입니다]라고 하는 이름의 을 만들고 싶다고 합니다.123456e6.
백틱에 에러는 없다.
DB [XXX]> create temporary table `123456e6` (`id` char (8));
Query OK, 0 rows affected (0.03 sec)
백틱을 사용하지 않을 때 오류 발생.
DB [XXX]> create temporary table 123451e6 (`id` char (8));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '123451e6 (`id` char (8))' at line 1
★★★★★★★★★★★★★★.123451a6는(백체크 없이)완벽한 식별자 이름입니다.
DB [XXX]> create temporary table 123451a6 (`id` char (8));
Query OK, 0 rows affected (0.03 sec)
이것은 완전히 때문이다.1234156e6을 사용하다
PHP와 MySQL을 조합하면 큰따옴표와 작은따옴표로 쿼리 작성 시간이 훨씬 쉬워집니다.
$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";
이제 MySQL 쿼리에 직접 게시 변수를 사용하고 있다고 가정해 보겠습니다.
$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (' ".$_POST['id']." ', ' ".$_POST['name']." ', ' ".$_POST['email']." ')";
이것은 MySQL에 PHP 변수를 사용하는 경우의 베스트 프랙티스입니다.
테이블 콜과 값이 변수인 경우 다음 두 가지 방법이 있습니다.
""다음 중 하나:
$query = "INSERT INTO $table_name (id, $col1, $col2)
VALUES (NULL, '$val1', '$val2')";
또는
$query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")
VALUES (NULL, '".$val1."', '".$val2."')";
'':
$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')
VALUES (NULL, '.$val1.', '.$val2.')';
ticks 를 합니다.``"/" "MySQL 예약 완료"
참고: 열 이름을 테이블 이름으로 지정하는 경우 다음과 같이 백체크를 사용합니다.
`table_name``column_name` <--------------------------------------------.뒷진드기로부터요
VALUES() 목록과 같은 문자열 값에는 작은 따옴표를 사용해야 합니다.
일반적으로 백틱은 식별자를 나타내기 위해 사용되며 실수로 예약된 키워드를 사용하는 경우에도 안전합니다.
PHP와 MySQL을 조합하면 큰따옴표와 작은따옴표로 쿼리 쓰기 시간이 훨씬 쉬워집니다.
(잘 설명한) 답변 외에 다음과 같은 답변이 없었고, 저는 이 Q&A를 자주 방문합니다.
간단히 말하면 MySQL은 사용자가 자체 테이블/컬럼에서 계산을 하고 싶다고 생각하고 "이메일"과 같은 하이픈을 다음과 같이 해석합니다.e mail
면책사항:그래서 데이터베이스 조작이 전혀 익숙하지 않고 이미 기술된 용어를 이해하지 못하는 분들을 위해 이 답변을 참고용으로 추가하려고 합니다.
SQL 서버 및 MySQL, PostgreySQL, Oracle은 큰따옴표()를 이해하지 못합니다.따라서 쿼리는 큰따옴표()가 없어야 하며 작은따옴표()만 사용해야 합니다.
백트립(')은 SQL에서 사용하는 옵션이며 테이블 이름, DB 이름 및 열 이름에 사용됩니다.
MySQL을 호출하기 위해 백엔드에 쿼리를 쓰려는 경우 다음과 같은 변수에 쿼리를 할당하기 위해 큰따옴표() 또는 작은따옴표()를 사용할 수 있습니다.
let query = "select id, name from accounts";
//Or
let query = 'select id, name from accounts';
이 있다면where"/"/"를 합니다.insert 및 값또/ an는update다음과 같은 값에는 작은따옴표(')를 사용합니다.
let querySelect = "select id, name from accounts where name = 'John'";
let queryUpdate = "update accounts set name = 'John' where id = 8";
let queryInsert = "insert into accounts(name) values('John')";
//Please not that double quotes are only to be used in assigning string to our variable not in the query
//All these below will generate error
let querySelect = 'select id, name from accounts where name = "John"';
let queryUpdate = 'update accounts set name = "John" where id = 8';
let queryInsert = 'insert into accounts(name) values("John")';
//As MySQL or any SQL doesn't understand double quotes("), these all will generate error.
큰따옴표()와 작은따옴표()를 사용할 때 이 혼동을 피하고 싶다면 에서는 다음과 같은 작은따옴표()를 사용할 것을 권장합니다.
let query = 'select is, name from accounts where name = \'John\'';
double(") 또는 single(') 따옴표 문제는 다음과 같은 값을 동적으로 할당하고 문자열 연결을 수행해야 할 때 발생합니다.
let query = "select id, name from accounts where name = " + fName + " " + lName;
//This will generate error as it must be like name = 'John Smith' for SQL
//However our statement made it like name = John Smith
//In order to resolve such errors use
let query = "select id, name from accounts where name = '" + fName + " " + lName + "'";
//Or using backslash(\)
let query = 'select id, name from accounts where name = \'' + fName + ' ' + lName + '\'';
추가 승인이 필요한 경우 JavaScript에서 인용문을 따르십시오.
따옴표를 사용하지 않는 것이 도움이 될 수 있습니다.이는 쿼리를 생성하는 코드의 문제를 강조 표시할 수 있기 때문입니다.예를 들어 다음과 같습니다.
여기서 x와 y는 항상 정수여야 합니다.
* FROM 택 * selecttable서 x = y = 0 기=x = 0 y = 0
SQL 구문 오류...조금 게으르지만 유용할 수 있다...
알기 쉬운 말:
따옴표(Single 및 Double)는 문자열 주위에 사용됩니다.
백틱은 테이블 및 열 식별자 주변에서 사용됩니다.
단일 따옴표와 이중 따옴표를 조합하여 작성:
우리가 이걸 달성하려면
이거 드셔보세요.
SELECT "They've found this tutorial to be helpful"
~이것을 실현하고 싶다:
이거 드셔보세요.
SELECT 'They\'ve responded, "We found this tutorial helpful"'
상세설명:
언급URL : https://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks-in-mysql
'source' 카테고리의 다른 글
| 파이캄의 검사관이 "d = {}"에 대해 불평하는 이유는 무엇입니까? (0) | 2022.12.11 |
|---|---|
| mariadb odbc가 잘못된 포인터 오류를 발생시킵니다. (0) | 2022.12.11 |
| 유형 스크립트 무시 오류 "유형 값에 속성이 없습니다." (0) | 2022.12.11 |
| 요청 라이브러리에서 JSON 응답을 구문 분석하는 가장 좋은 방법은 무엇입니까? (0) | 2022.12.11 |
| PHP에서 콜백을 구현하려면 어떻게 해야 합니까? (0) | 2022.12.11 |


