1

Wordpress3.5の前に完全に機能するwpdbprepareステートメントがあります。これは私の行です:

$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

1 に答える 1

5

私の悪い、これはとても簡単です!Wordpressは2つのプレースホルダー%sと%dを使用します。

データベースに文字列を渡すときは%sを使用する必要があります

その間:

整数には%dを使用する必要があります。

上記の私の問題は、それらを混同していることです。文字列には%dを使用し、整数には%sを使用します。したがって、特定のデータ型に適切なプレースホルダーを使用することで問題が解決されます。問題が解決しました。

たとえば、php変数$ idでidを使用してデータベースをクエリする場合、プレースホルダーは%dである必要があります。それ以外の場合、名前などの文字列では整数であるため、%sを使用します。

于 2012-12-18T03:09:04.920 に答える