【问题标题】:global $wpdb displaying garbage data along with results of my select query全局 $wpdb 显示垃圾数据以及我的选择查询的结果
【发布时间】:2019-01-17 20:56:14
【问题描述】:

我在 MySQL 数据库中有一个自定义表,我正在尝试使用 global $wpdb 进行查询。我使用来自以下两个来源的信息定义了我的查询:

  1. https://codex.wordpress.org/Class_Reference/wpdb
  2. https://wordpress.stackexchange.com/questions/233021/display-data-on-word-press-site-posts-and-pages-from-mysql-table

phpMyAdmin中的数据是这样的:

查询似乎工作正常,因为它从我的自定义表中选择数据,但是除了表中可用的信息之外,输出似乎包含垃圾/不必要的信息。

我希望它显示为表格/类似于它在 phpMyAdmin 中的显示方式,我可以在其中关联 SrNoCompound 等与表中的其他列:

add_shortcode('wpse_233031_shortcode', function(){
    global $wpdb;
    $myrows = $wpdb->get_results( "SELECT `SrNo`, `Compound` FROM PNaphtha");
    //$results = $wpdb->get_results( "SELECT `SrNo`, `Compound` FROM PNaphtha" );
    ob_start();
    echo var_dump($myrows );
    //return ob_get_clean(); 
});

我得到以下结果

array(10) {
    [0]=> object(stdClass)#6275 (2) {
        ["SrNo"]=> string(1) "2" 
        ["Compound"]=> string(12) "abietic acid"
    }
    [1]=> object(stdClass)#6274 (2) { 
        ["SrNo"]=> string(1) "3"
        ["Compound"]=> string(12) "acenaphthene"
    }
    [2]=> object(stdClass)#6273 (2) {
        ["SrNo"]=> string(1) "4"
        ["Compound"]=> string(6) "acetal"
    }
    [3]=> object(stdClass)#6272 (2) {
        ["SrNo"]=> string(1) "5"
        ["Compound"]=> string(12) "acetaldehyde"
    }
    [4]=> object(stdClass)#6271 (2) {
        ["SrNo"]=> string(1) "6"
        ["Compound"]=> string(9) "acetamide"
    }
    [5]=> object(stdClass)#6270 (2) {
        ["SrNo"]=> string(1) "7"
        ["Compound"]=> string(11) "acetanilide"
    }
    [6]=> object(stdClass)#6269 (2) {
        ["SrNo"]=> string(1) "8"
        ["Compound"]=> string(11) "acetic acid"
    }
    [7]=> object(stdClass)#6268 (2) {
        ["SrNo"]=> string(1) "9"
        ["Compound"]=> string(16) "acetic anhydride"
    }
    [8]=> object(stdClass)#6267 (2) {
        ["SrNo"]=> string(2) "10"
        ["Compound"]=> string(7) "acetone"
    }
    [9]=> object(stdClass)#6266 (2) {
        ["SrNo"]=> string(2) "11"
        ["Compound"]=> string(19) "acetone cyanohydrin"
    }
}

虽然我查询的所有信息都在这里,但也有很多不必要的信息。

我尝试了以下更改,但似乎都没有工作

$myrows = $wpdb->get_row( "SELECT `SrNo`, `Compound` FROM PNaphtha"); // get_row

output_type changed to ARRAY_A, ARRAY_N, OBJECT_K

echo var_dump changed to echo array

如果您能告知如何将结果格式化为表格或数组,我将不胜感激。另外,我已将上述代码放在我的主题的functions.php 文件中。有没有更好的方法来做到这一点?

【问题讨论】:

  • 您的某个字段中是否有序列化数据?
  • 那是什么垃圾?这就是 PHP 显示嵌套数据和对象的方式。
  • 感谢您的回复。不,我没有序列化数据。我添加了显示在 phpMyAdmin 中的数据的屏幕截图。
  • 该代码属于您的functions.php(除非您制作了插件),所以那里很好。你试过echo '<pre>' . print_r( $myrows, TRUE ) . '</pre>;吗?
  • 感谢 disinfor。您的建议有所不同,它显示的结果有点“整齐”,就像换行一样,给人一种子弹般的感觉,但“垃圾”仍然在那里。

标签: php mysql wordpress serialization


【解决方案1】:

因此,您将对象作为输出,这就是您在其中看到该信息的原因。进行以下更改。将“ARRAY_A”(关联数组)添加到函数调用的末尾。

$wpdb->get_results( "SELECT `SrNo`, `Compound` FROM PNaphtha", ARRAY_A);

这将使您的查询不会作为对象返回,并且您的 var_dump 将看起来像您期望的那样。

【讨论】:

  • 谢谢 Difster,我已经尝试过 ARRAY_A 和 ARRAY_N,但我仍然得到“垃圾”数据。
  • Array ( [0] => Array ( [SrNo] => 2 [Compound] => 枞酸) [1] => Array ( [SrNo] => 3 [Compound] => 苊) [2] => 数组 ( [SrNo] => 4 [化合物] => 乙缩醛) [3] => 数组 ( [SrNo] => 5 [化合物] => 乙醛) [4] => 数组 ( [SrNo ] => 6 [化合物] => 乙酰胺) [5] => 数组 ([SrNo] => 7 [化合物] => 乙酰苯胺) [6] => 数组 ([SrNo] => 8 [化合物] => 乙酸酸)[7] => 阵列([SrNo] => 9 [化合物] => 乙酸酐)[8] => 阵列([SrNo] => 10 [化合物] => 丙酮)[9] => 阵列( [SrNo] => 11 [化合物] => 丙酮氰醇 ) ) 1
  • 好吧,看起来应该如此。您在那里看到的是数组索引。即使您指定关联,它也仍然具有数字索引。这是完全可预测的正常行为。它看起来正是我所期望的。现在你只需要遍历你的数组。
  • 能否请您告知遍历数组的含义。
  • 告诉我你想用这些数据做什么,我会帮你弄清楚。有多种方法可以处理数据。
【解决方案2】:

可能是因为你使用了 var_dump

var_dump 函数显示有关变量/表达式的结构化信息,包括其类型和值。

我会推荐使用 print_r

print_r() 以人类可读的方式显示有关变量的信息。数组值将以显示键和元素的格式呈现。

如果你改变了,你应该能够看到变化

var_dump($myrows )

print_r($myrows)

这就是我如何做到你想要的(没有回应结果):

$sql = "SELECT `Srno`,`compound` FROM `pnaphtha`";
$result = $conn->query($sql);

echo "<table>";
while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row['Srno']."</td><td>".$row['compound']."</td></tr>";
    }

 echo "</table>";

但是,由于您使用的是 WordPress,我怀疑它会类似于

global $wpdb;
$sql =  "SELECT `SrNo`, `Compound` FROM PNaphtha";
//you may need to add ARRAY_A

$myrows = $wpdb->get_results($sql);

echo "<table>";
while($myrows = $result->fetch_assoc()) {
    echo "<tr><td>".$myrows['SrNo']."</td><td>".$myrows['Compound']."</td></tr>";
}
echo "</table>";

我实际上无法测试 wordpress 版本,因为我懒得设置 wordpress 安装哈哈

【讨论】:

  • 感谢您的建议。我尝试更改为 print_r($myrows) 但现在它显示的只是 Array ( ) 1。
  • 很抱歉 Elliot,我在测试您的建议时对我的部分代码进行了注释。 print_r 似乎有帮助,但我仍然得到 Array ( [0] => Array ( [0] => 2 [1] => abietic acid ) [1] => Array ( [0] => 3 [1] =>苊) [2] => 阵列 ( [0] => 4 [1] => 乙缩醛) [3] => 阵列 ( [0] => 5 [1] => 乙醛) [4] => 阵列 ( [ 0] => 6 [1] => 乙酰胺)[5] => 阵列([0] => 7 [1] => 乙酰苯胺)[6] => 阵列([0] => 8 [1] =>乙酸)[7] => 阵列([0] => 9 [1] => 乙酸酐)[8] => 阵列([0] => 10 [1] => 丙酮)[9] => 阵列( [0] => 11 [1] => 丙酮氰醇) ) 1
  • 你可以试试 var_export() 吗?
  • 好像删掉了方括号。数组 (0 => 数组 ('SrNo' => '2', '化合物' => '枞酸', ), 1 => 数组 ('SrNo' => '3', '化合物' => '苊' , ), 2 => 数组 ('SrNo' => '4', '化合物' => '乙缩醛', ), 3 => 数组 ('SrNo' => '5', '化合物' => '乙醛' , ), 4 => 数组 ('SrNo' => '6', 'Compound' => '乙酰胺', )......
  • 非常感谢您的帮助,但是这个根本不起作用。我对 WordPress 隐约熟悉,完全不熟悉这样做的“经典”方式,所以我无法判断可能出了什么问题。但是,在将您的代码添加到 functions.php 文件时,我得到了一般的 HTTP 错误。此页面无法正常工作 www.xxxxxx.com 目前无法处理此请求。 HTTP 错误 500
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多