Custom Wordpress Table wpdb

时间:2014-11-26 作者:Brandon Shutter

查询自定义表和获取结果时遇到问题。

从Wordpress 3.9开始,我不能再运行mysql\\u query(),必须使用$wpdb->query();

因此,请记住:

旧代码:

<?php
if (!empty($_GET[\'msg\'])) {

global $wpdb;
$vuser_id = $_GET[\'id\'];
$sql = "SELECT * FROM wp_quiz WHERE quiz_id=\'$vuser_id\'";
$query = mysql_query($sql);
$result = mysql_fetch_assoc($query);

$total = $result[\'total_count\'];
以我认为合适的方式进行更新:

<?php
if (!empty($_GET[\'msg\'])) {

    global $wpdb;
    $vuser_id = $_GET[\'id\'];
    $sql = "SELECT * FROM wp_quiz WHERE quiz_id=\'$vuser_id\'";
    $query = $wpdb->query($sql);
    $result = mysql_fetch_assoc($query);

    $total = $result[\'total_count\'];
var\\u倾销$结果给我NULL

现在我得到一个错误:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, integer given in on line 16

我试过使用$wpbd->get_row($sql); $wpdb->get_results($sql); 全部返回空值。

如果我exit( $sql ); 我可以看到查询正在正确运行SELECT * FROM wp_quiz WHERE quiz_id=\'5925\' 如果我直接将其运行到phpmyadmin中,它会给出正确的结果。

我不确定我做错了什么。

2 个回复
最合适的回答,由SO网友:Brandon Shutter 整理而成

<?php
if (!empty($_GET[\'msg\'])) {

    global $wpdb;
    $user_id = (int) $_GET[\'id\'];
    $sql = $wpdb->prepare("SELECT * FROM wp_quiz WHERE quiz_id=\'%d\'", $user_id);
    $result = $wpdb->get_row($sql, ARRAY_A);
    var_dump($user_id);
    var_dump($result);

    $total = $result[\'total_count\'];
在我把问题贴出来后,我终于弄明白了。

SO网友:Pat J

首先,您不应该处理不受信任的输入(在这种情况下,$_GET[\'id\'] 到您的数据库。Always SQL-escape the query and validate/sanitize the data. (在下面的代码段中,它是使用$wpdb->prepare() 用于逃跑和int 要清除为整数值的类型转换)。

其次$wpdb 对象提供的不仅仅是query() 作用在您的情况下,听起来您正在尝试获取一组行,因此可以使用get_results() 功能:

if ( ! empty( $_GET[\'msg\'] ) ) {

    global $wpdb;
    $vuser_id = (int) $_GET[\'id\'];
    $result = $wpdb->get_results( 
                   $wpdb->prepare( 
                       "SELECT * FROM {$wpdb->prefix}quiz WHERE quiz_id=%d", 
                       $vuser_id 
                    ) 
    );

    var_dump( $result );

}
Thevar_dump() 这样你就可以检查$wpdb->get_results() 已返回。默认情况下,它将是objects.

参考wpdb class 在WordPress Codex上

结束

相关推荐

带有jQuery的自定义元框。可排序的自定义帖子类型列表

我想做的是在不同的页面上定制不同的帖子类型。我到处找了好一阵子,似乎找不到任何帮助。我有一个名为staff的职位类型,这是一个员工列表。然后,我有几个页面,其中使用类别显示这些工作人员(一个工作人员可以在多个类别中,并显示在多个页面上)。我需要能够订购一页一页的员工名单。例如,假设我有6名自定义职位类型的员工。-约翰-亚当-史蒂夫-马特-安德鲁-汤姆A类中有约翰、亚当、史蒂夫和马特,B类中有约翰、史蒂夫和安德鲁。在A页上,我希望显示A类员工,但在B页上按以下顺序显示John、Adam、Steve和Matt