답변:
아니요, 데이터를 준비하거나 이스케이프하면 안됩니다 wpdb
. 이것은 수업에 의해 수행됩니다 .
로부터 wpdb 클래스 참조 :
데이터 :
(배열) 삽입 할 데이터 (열 => 값 쌍). $ data 열과 $ data 값은 모두 "raw"여야합니다 (SQL 이스케이프도 아님).
그러나 insert
메소드를 사용하지 않고 자신의 SQL을 작성했다면 그렇습니다 prepare
.
다음은 wpdb 클래스에 대한 경고입니다.
https://codex.wordpress.org/Class_Reference/wpdb
경고
이 클래스의 일부 함수는 SQL 문을 입력으로 사용합니다. SQL 주입 공격을 방지하려면 SQL 쿼리에 통합 한 신뢰할 수없는 모든 값을 SQL 이스케이프해야합니다. 사용하려는 기능이 SQL을 이스케이프하거나 사전 이스케이프 될 것으로 예상되는지 문서를 확인하십시오.
wpdb 클래스는 자동으로 데이터를 준비하거나 이스케이프하지 않습니다.
코드에서 100 % 데이터 소스를 신뢰할 수 없다면 준비 클래스 (?)를 사용하는 것이 좋습니다.
준비 클래스를 사용하면 준비 클래스를 올바르게 사용하지 않고도 문제를 해결할 것이라고 생각하지 마십시오. 나는 이것에 상당히 익숙하지 않으므로 내가 옳지 않으면 모든 수정 사항을 회신으로 게시하십시오.
$ wpdb-> prepare ( ""표에서 ID = % d AND 이름 = % s ", $ id, $ name);
위의 문장에는 2 가지 추가 속성이 있습니다. 하나는 ID이고 하나는 이름입니다. 내가 읽는 한, 각 항목은 쿼리의 항목 수에 해당합니다. 또한 % s = 문자열, % d = 정수 및 % f = float입니다.
또한 내 독서에서 추가 속성을 넣지 않으면 준비는 실제로 아무것도하지 않습니다. 경고가 표시되지만 끄면 알 수 없을 것입니다.
다음은 준비 클래스를 아래의 INSERT에 추가하는 클래스 참조 자체의 예입니다.
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
$ wpdb-> query ($ wpdb-> prepare ( "$ wpdb-> postmeta (post_id, meta_key, meta_value)에 삽입 VALUES (% d, % s, % s)", 배열 (10, $ metakey, $ metavalue) ));
내 관심사는 '아무도'참조하지 않은 동일한 페이지에 따라 upvoted 답변이 잘못되었다는 것입니다. 나는 당신이 Prepare ()를 사용한다고 가정하고 있지만,이 답변을 올바르게 취했기 때문에 탈출의 다른 표준 PHP 메소드는 사용하지 않는다고 가정하고 있습니다.
어쨌든 ... 아마도 원래의 대답 이후로 상황이 바뀌었을 것입니다.
$wpdb->insert()
, $ wpdb-> update ()` 와 같은 함수를 사용 하거나 $wpdb->delete()
데이터는 RAW 여야합니다. 예를 들어 $wpdb->query()
SQL 문을 입력으로 전달 하는 경우 신뢰할 수없는 데이터를 이스케이프해야합니다.
wpdb insert 또는 wpdb delete를 사용할 때 SQL 삽입을 막을 필요는 없습니다.
다음 링크를 참조하십시오.
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks
insert
및update
그 필요하지 않습니다. 그러나와 함께 사용해야합니다query
.