否,您不想交换出表名。如果这样做,表名将被括在引号中,并将触发SQL错误。尝试:
$table = $wpdb->prefix . \'members\';
$qry = $wpdb->prepare("SELECT * FROM %s", $table);
var_dump($qry);
$qry = "SELECT * FROM $table";
var_dump($result);
第一个字符串是无效的SQL。如果您有一个正确名称的表,第二个应该可以使用。
prepare()
旨在对用户提供的数据进行操作,这些数据可能来自恶意来源的可疑数据。您不需要交换数据,例如表名,这些数据不是来自可疑的源。
您想要的是:
$table = $wpdb->prefix . \'members\';
$qry = "SELECT * FROM $table";
$result = $wpdb->get_results($qry, ARRAY_A);
var_dump($result);
顺便说一下,您的括号在这里是错误的(即使其余部分有效):
$result = $wpdb->get_results($wpdb->prepare("SELECT * FROM %s", $table, ARRAY_A));
The
ARRAY_A
是对
prepare
而不是
get_results
. 应该是(尽管如上所述,值交换是错误的):
$result = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM %s", $table),
ARRAY_A
);