我在从以下代码返回有效响应时遇到问题。目的是返回基于post\\u title()的城市列表。
print\\r响应表示正在处理响应(见下文),但在$city上进行回音时,会发送错误。
add_shortcode(\'citylist\',function(){
global $wpdb;
$country = $wpdb->prefix . \'worldcities\';
$title = wp_title("",false,\'right\');
$args = $wpdb->get_results( "SELECT city_ascii FROM $country WHERE ranking < 2 AND country = \'$title\'");
foreach ($args as $city_ascii=>$city) {
print_r ($city);;
};
} );
打印答复如下(注意,页码标题为“尼日利亚”;。
StdClass Object ([city_ascii] => Ibadan) StdClass Object ([city_ascii] => Ogbomoso ...
所有回答都是预期的和正确的(如Ibadan、Ogbomoso等)。
然而,当这被echo替换时,它会抛出一个错误。(见下面修订的代码)。
add_shortcode(\'citylist\',function(){
global $wpdb;
$country = $wpdb->prefix . \'worldcities\';
$title = wp_title("",false,\'right\');
$args = $wpdb->get_results( "SELECT city_ascii FROM $country WHERE ranking < 2 AND country = \'$title\'");
foreach ($args as $city_ascii=>$city) {
echo $city;;
};
} );
任何帮助都将不胜感激。
(注意,在任何人提出这条途径之前,我已经阅读了PHP手册,在这里和其他董事会上回顾了以前的帖子)。
最合适的回答,由SO网友:Pat J 整理而成
你的print_r()
声明显示您的$wpdb
调用正在返回objects, 而你不能echo
一个对象。(除非对象具有__toString()
方法,但stdClass
没有。)
您需要从对象中获取所需的属性,如下所示:$city->city_ascii
.
Also, you shouldn\'t echo
the content 由短代码生成。你应该改为return
字符串。
Code edited 使用$wpdb->prepare()
防止SQL注入(根据@TomJNowell的评论)。
add_shortcode(\'citylist\',function(){
global $wpdb;
$content = \'\';
$country = $wpdb->prefix . \'worldcities\';
$title = wp_title("",false,\'right\');
$args = $wpdb->get_results(
$wpdb->prepare(
"SELECT city_ascii FROM %s WHERE ranking < 2 AND country = %s",
$country,
$title
)
);
foreach ($args as $city_ascii=>$city) {
$content .= esc_html( $city->city_ascii ) . \'<br />\';
};
return $content;
} );