从wp数据库中检索值

时间:2011-10-20 作者:markyeoj

为什么我的sql语句不返回任何值。。这是错的吗?

<?php

        global $wpdb;
        $result = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->wp_frm_item_metas"));
        foreach ($result as $item){
            $eventname= $result->meta_value;
        }

        ?>

        <h2><?php echo $eventname;?></h2>
我正在做的是,我正在使用强大的表单显示存储在数据库中的数据。。(非专业)。。我的代码有问题吗?

4 个回复
最合适的回答,由SO网友:Joiwoo 整理而成

我认为foreach函数应如下所示:

foreach ($result as $item){
            $eventname= $item->meta_value;
        }

SO网友:s_ha_dum

您的代码有几个问题。

除非您或插件添加了wp_frm_item_metas$wpdb,$wpdb 不知道是什么$wpdb->wp_frm_item_metas 是您将得到一个“Undefined Property”错误,查询将无法工作。

你不能只使用$wpdb-> 加上任何表名。那行不通。您必须将属性添加到$wpdb, 哪一个isn\'t that hard to do.

您的foreach 是错误的。你在绕圈子$results 但在每个操作中,您都需要访问$item, 不$result. 像这样:

foreach ($result as $item){
  echo $item->meta_value;
}
但是,您的查询不包含限制性登录WHERE 子句--因此它将返回wp_frm_item_metas 桌子所以,要么你需要这个。。。foreach($result as$item){$eventname[]=$item->meta\\u value;}。。。,考虑到你试图echo $eventname;$wpdb 方法错误。我觉得你需要更接近这一点的东西:

$eventname = $wpdb->get_var(
  $wpdb->prepare(
    "SELECT meta_value* FROM $wpdb->wp_frm_item_metas WHERE something = %s",
    \'something\'
  )
);
你现在可以echo $eventname 没有循环的麻烦。

注意我是如何修改prepare 方法调用。$wpdb->preparemust have 两个参数。您的代码在这一点上也会失败参考:https://codex.wordpress.org/Class_Reference/wpdb

还有请enable debugging 当你工作的时候。如果你遵循这条简单的规则,你会发现其中很多。

SO网友:Alex Sancho

您的代码出错$eventname 应包含$item->meta_value

SO网友:markyeoj

好的,我知道了,非常感谢。。

现在,我试图以这样一种正确的方式显示输出。。第1列–事件名称(带有可单击的链接,单击该链接后会转到一个页面,该页面会在包含详细信息的页面上显示单个事件)第2列–事件日期第3列–城市、州。(地点)

这是我的密码

$query = "SELECT * FROM wp_frm_item_metas where field_id IN (8,13, 12, 11 )";
                    $result = @mysql_query($query) or die (mysql_error());
                    ?><table border="1" colspan="3">
                    <th>Event</th>
                    <th>Date</th>
                    <th>Venue<?
                    $i=1;
                    while($i <= 1)
                    { echo "<tr>";
                    while($row = mysql_fetch_array($result)){



                            if($row[\'field_id\'] == 8){
                                    $title = $row[\'meta_value\'];

                            }

                            else if($row[\'field_id\'] == 13){
                                    $link = $row[\'meta_value\'];
                            echo "<td><a href=$link target=_blank> $title </a></td>";

                            }

                            else if($row[\'field_id\'] == 12){
                                    $date=$row[\'meta_value\'];
                                    echo "<td>$date</td>";
                            }



                            else {
                                    $place=$row[\'meta_value\'];

                                    echo "<td>$place</td>";
                            }



                            $i++;


                    }      



                    echo "</tr>";
                            }
                            ?>
                            </table>
但结果确实令人困惑。。第一栏是场地。。第二个是更正日期。。第三个是标题。。为什么显示器是这样的?

以下是数据库的结构:

enter image description here

结束

相关推荐

只提取“当前”wp_post的SQL查询?

wp\\u posts表似乎保留了相同的、非常相似但可能不同的所有修订,posts/page/whatever。我有点熟悉SQL,但不熟悉WordPress。我只需要提取那些将出现在面向公众的网站上的记录;因此,只有最新的修订,而不是所有被替代的行。不确定如何筛选字段。显然,还有比以下更复杂的事情:select * from wp_posts where post_status in (\'publish\',\'revision\') order by post_modified