$wpdb-prepare
工作原理如下sprintf
和vsprintf
. 第一个参数始终是格式字符串。
唯一可接受的格式说明符是%s
和%d
. 其他我从未测试过的,但可能会导致按照Codex分析错误。您必须转义文字% 在查询中使用%, e、 g:%%
如果你像这样使用它sprintf
只有在运行时之前知道参数的数量,才可能做到这一点。参数的数量应该与格式字符串中的格式说明符的数量相匹配。
E.g: $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}_votes WHERE post_id = %d AND username = %s", $post_id, $username );
如果直到运行时才知道参数的数量,那么必须像vsprintf
. 在这种情况下,第一个参数将是格式说明符,但第二个参数将是数组。
E.g: $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}_votes WHERE post_id = %d AND username = %s", array( $post_id, $username ) );
$wpdb->prepare
将返回一个SQL查询字符串,您可以任意多次执行该字符串。
对于上述示例,结果查询将为:SELECT * FROM wp_votes WHERE post_id = 747 AND username = \'cooluser\'