2012-12-17 2 views
0

저는 Wordpress 3.5 이전에 완벽하게 작동하는 wpdb prepare 문을 가지고 있습니다. 이것은 내 라인입니다 :

$post_id = $wpdb->get_var($wpdb->prepare("SELECT a.post_id 
     FROM $metatable AS a 
     JOIN $metatable AS b ON a.post_id = b.post_id 
     WHERE a.meta_value = '$valuex1' AND b.meta_value = '$valuex2'")); 

이제 Wordpress 3.5에서는 완전히 위생적이지 않기 때문에 경고를 반환합니다. Wordpress에 의해 조언 된 바와 같이 자리 표시자를 사용하도록 수정했습니다 :

$post_id = $wpdb->get_var($wpdb->prepare("SELECT a.post_id FROM $metatable AS a JOIN $metatable AS b ON a.post_id = b.post_id WHERE a.meta_value =%d AND b.meta_value =%s",$valuex1,$valuex2)); 

그러나 더 이상 올바른 정보를 데이터베이스에서 검색하지 않습니다. 수정 된 쿼리에 문제가 있습니까? 다시 작동하도록 변경하는 방법은 무엇입니까?

도움 주셔서 감사합니다.

답변

4

나쁘지 만 너무 간단합니다! Wordpress는 두 개의 자리 표시 자 % s 및 % d을 (를) 사용합니다.

%의 정수 (D)가 사용되어야한다 : 데이터베이스

반면에 끈을 통과 할 때

% (S)는 사용되어야한다.

위의 문제점은 문자열을 % d, 정수를 % s (을)를 사용했습니다. 따라서 문제는 특정 데이터 형식에 올바른 자리 표시자를 사용하여 해결됩니다. 문제 해결됨.

예를 들어, PHP 변수 $ id를 사용하여 id를 사용하여 데이터베이스를 쿼리하는 경우, 이름 등의 문자열에 대해 정수이기 때문에 자리 표시자는 % d 여야합니다. % s를 사용하십시오.

관련 문제