从包含wpdb的页面中选择自定义元(WPAlchemy)

时间:2013-02-10 13:37:33

标签: wordpress wpdb

我已经阅读了一些关于我的wpdb问题的文档和类似的问题,但我看到了非常不同的答案,所以我有些困惑。

我要做的是从(最终)在Wordpress中获取大约250页的自定义元数据。 wpdb请求将在header.php中,并且代码必须构建一个数组,该数组将作为Google Map的输入。自定义元字段称为_ytF_f_name,_ytF_f_lat和_ytF_f_lng(不要问我原因: - ))。

所以最终输出应该是:[name1,lat1,lng1], [name2,lat2,lng2],等。

我正在使用Wordpress的自定义表,其前缀为yt_(在wp-config.php中定义)。自定义元是使用WPAlchemy构建的。我检查了数据库,并且元数据在那里(在postmeta表中)。

在结合几件事之后,这就是我现在所拥有的:

<?php
global $wpdb;
$querystr = "SELECT ".$wpdb->prefix."postmeta._ytF_f_name, ".$wpdb->prefix."postmeta._ytF_f_lat, ".$wpdb->prefix."postmeta._ytF_f_lng FROM ".$wpdb->prefix."postmeta WHERE post_type='page'";
$vars = $wpdb->get_results($querystr);
foreach ($vars as $var) {
echo '[' . $var->_ytF_f_name . ',' . $var->_ytF_f_lat . ',' . $var->_ytF_f_lat . '],';
}
?>

输出是空白的,所以我在这里缺少什么?

与此相关的另一个问题是;我读过一些关于“准备”以防止sql注入的内容。

正确使用prepare类来改变

$vars = $wpdb->get_results($querystr);

成:

$vars = $wpdb->get_results($wpdb->prepare($querystr));

1 个答案:

答案 0 :(得分:0)

关于您的问题,我没有看到错误,因此请在查询之前验证$wpdb->show_errors();是否存在SQL错误(doc here)。

prepare方法可以保护您免受SQL注入。 正如doc所说,它的工作原理如下:

 $wpdb->query(
    $wpdb->prepare(
       "INSERT INTO ___
       ( attr1, attr2 )
       VALUES ( %s, %d )",
       $valueOfAttr1,
       $valueOfAttr2
    )
 );

当然,您必须根据需要更改类型和值。