我很肯定你是错的。
让我们仔细看看您在问题中提到的这段代码。
在第一行设置$where
变量:
$where = \'WHERE ID IN (\' . substr(str_repeat(\'%d,\', count($my_options[\'acf_posts\'])), 0, -1) . \')\';
所以这条线真正的作用是:
获取一些选项的数目(我们称之为“N”)
重复%d
占位符N次将其附加到字符串WHERE ID IN (\'.
So
$where
变量包含如下字符串:
WHERE ID IN (%d, %d, %d, ...)
。。。正如您所看到的,这个字符串包含占位符。
在这一行之后是真正的查询,它是使用$where
变量,并使用这些占位符插入选项值。
当您构建查询字符串时,如果这些变量包含安全字符串(即不包含来自用户的值),那么使用变量并没有什么坏处。
请看下面的代码:
$sql = "SELECT * FROM {$wpdb->posts} WHERE ID=%d";
$results = $wpdb->get_results( $wpdb->prepare( $sql, 10 ) );
你认为这也是一种脆弱性吗?