在WP站点上显示SQL查询结果

时间:2021-07-27 作者:wgfy_working

我希望这不是多余的-但似乎总是有足够多的不同,我无法让事情顺利进行。

我正在我的functions.php 文件-所有其他功能工作正常。

$query = $mydb->get_results("select * from table");
//这在mysql中运行得很好,我可以做count(*)之类的事情并将其报告回来。

但无论出于什么原因,我都无法让表返回输出到wordpress页面的结果

return "$query";
return "$query[0]";
return "$query["wk"]";
在任何页面上显示的唯一输出是我期望输出的单词数组。

所以像这样的工作非常完美-

function VtVML_visitor(){
    $home = get_field(\'home\');
    $visitor = get_field(\'visitor\');
    $mydb = new wpdb(\'OMMITTED\');
    
    $hWins = $mydb->get_var("SELECT count(*) FROM `table` where v = \'$home\' and h = \'$visitor\' and h_ml_win = 1");
    $hLoss = $mydb->get_var("SELECT count(*) FROM `table` where v = \'$home\' and h = \'$visitor\' and h_ml_loss = 1");
    $hTie = $mydb->get_var("SELECT count(*) FROM `table` where v = \'$home\' and h = \'$visitor\' and h_ml_tie = 1");
    $vWins = $mydb->get_var("SELECT count(*) FROM `table` where h = \'$home\' and v = \'$visitor\' and v_ml_win = 1");
    $vLoss = $mydb->get_var("SELECT count(*) FROM `table` where h = \'$home\' and v = \'$visitor\' and v_ml_loss = 1");
    $vTie = $mydb->get_var("SELECT count(*) FROM `table` where h = \'$home\' and v = \'$visitor\' and v_ml_tie = 1");

    $tWins = $vWins+$hWins;
    $tLoss = $vLoss+$hLoss;
    $tTie = $vTie+$hTie;
    
    return "$visitor vs $home overall:<br>$tWins - $tLoss - $tTie";
    
    $mydb -> close();
}

add_shortcode(\'VtVML\',\'VtVML_visitor\');
但如果我将其重新调整为新的短代码,并更改查询以提取特定字段:

$schedule = $mydb->get_var("SELECT wk,v,h FROM `table` where h = \'$home\'");

return "$schedule";
我看到上面描述的错误。我假设我需要执行foreach或while命令,但所有使用这些命令的尝试都没有产生结果。

1 个回复
SO网友:Tom J Nowell

我看到上面描述的错误。我假设我需要执行foreach或while命令,但所有使用这些命令的尝试都没有产生结果。

是的,短代码返回字符串,而不是数组/列表。您需要将数组/列表转换为单个字符串。然而get_var 假设一个结果。如果需要多个结果,则需要使用允许多个结果的不同WPDB方法,例如get_results:

<?php

global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );
代码还需要使用$wpdb->prepare 在SQL语句中插入变量。E、 g.:

$wpdb->query(
   $wpdb->prepare(
      "
      INSERT INTO $wpdb->postmeta
      ( post_id, meta_key, meta_value )
      VALUES ( %d, %s, %s )
      ",
      10,
      $metakey,
      $metavalue
   )
);
请注意$metakey$metavalue 变量不在字符串中,因为这是不安全的。相反,它们有占位符%s 替换为经过清理的版本,以防止它们破坏查询或插入恶意值

See the official docs for examples on using get_results