2017-11-27 1 views
1

가이 코드워드 프레스 PHP는 특수 문자

$ntimes = $wpdb->get_var("SELECT Count(*) FROM wp_comp_review_list where email = $key->email"); 

내가 뭘하려고했던 것은 이메일 where email = "[email protected]"의 수를 계산 인에게이 SQL 결과 얻을. 비교할 전자 메일은 다른 foreach 루프에서 생성됩니다.

나는 다음과 같은 오류가 오전 :

"WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com' at line 1]"

나는 공백이 이름을 비교하여 시도. 나는 공간 때문에 같은 오류가났다.

WHERE을 (를) 특수 문자와 함께 사용하는 방법에 대한 팁이 있으십니까?

+0

당신 오류가 매우 분명하다 : 당신은 유효하지 않은 SQL 문을 가지고있다. 변수를 올바르게 대체하여 문제를 해결해야합니다. –

답변

1

이메일은 문자열입니다 그렇지 않다면 해킹하는 것이 안전 할 것입니다.

따라서 prepare() 대신 준비된 문을 사용해야합니다.

<?php 
$results = $wpdb->get_results(
    $wpdb->prepare(' 
     SELECT Count(*) 
     FROM wp_comp_review_list 
     WHERE email = %s', 
     [ 
      $key->email 
     ] 
    ) 
); 

이도하지만, esc_sql()를 사용하여 작동하지 않도록해야 할 때 할 수 있습니다

<?php 
$email = esc_sql($key->email); 
$wpdb->get_var(" 
    SELECT Count(*) 
    FROM wp_comp_review_list 
    WHERE email = '{$email}'" 
); 
?> 
+0

고마워요. 나는 이것을 사용할 것이다. 나는 SQL injenction에 대해 전혀 몰라.하지만 보안을 위해 코드를 사용할 것이다. –

+1

감사합니다 np, 나는 wordpress에 대해 전혀 몰라; P는 그냥 SQL 주입. –

0

사용이 :

$key->email 이후
$ntimes = $wpdb->get_var("SELECT Count(*) FROM wp_comp_review_list where email = '$key->email'"); 

, 더 이상 SQL 명령으로 간주 공간이 후 하나의 단어와 다음 일은 (그렇지 않은)

0

당신이 그리워 인용 공간있다 조건에서 '' : 당신은 또한 SQL 주입에 열려있어 비록 당신이 where email = '$key->email'을 따옴표를 사용한다, 그래서

$ntimes = $wpdb->get_var("SELECT Count(*) FROM wp_comp_review_list where email = '$key->email'"); 
+0

와우! 효과가있었습니다. 나는 결코 전에 그것을 시도하지 않았다. 대단히 감사합니다. –

+0

@TimothyFigueroa SQLi로 연결됩니다. –

+0

조건을 확인하실 때 char, varchar, text 등 ... tonuse가 필요합니다. 기억해 두십시오. – alvarofvr