【问题标题】:returning rows from $wpdb - losing my mind从 $wpdb 返回行 - 失去理智
【发布时间】:2013-09-13 10:14:42
【问题描述】:

花了最后两个小时试图让这个 $wpdb->get_results 以与 ($row = mysql_fetch_array($result)) 相同的方式返回一个数组。我已经尝试了所有方法,get_col、get_row 等……浏览了 wp 法典并尝试了所有示例,但实际上没有任何效果。一切都返回 Array ( ) 或 NULL。我在这里失去理智,非常感谢任何帮助。

我最初在 PDO 中编写了这个插件,然后意识到 wordpress 不支持它。我不是 wpdb sql 的粉丝。在这里;

$query = $wpdb->get_results("SELECT * FROM admin WHERE user_id = '$userid'");
foreach ($query as $row) {
echo $row->date;
}

【问题讨论】:

  • 您究竟在哪里使用此代码?单机、插件、主题?什么功能,钩子?

标签: php wordpress


【解决方案1】:

嗯,你一定在http://codex.wordpress.org/Class_Reference/wpdb 中遇到过这个问题:

三个预定义常量之一。默认为对象。

  • OBJECT - 结果将作为对象输出。

  • ARRAY_A - 结果将作为关联数组输出。

  • ARRAY_N - 结果将作为数字索引数组输出。

您可以按如下方式编写代码:

$result_array = $wpdb->get_results("SELECT * FROM admin WHERE user_id = '$userid'", ARRAY_A);
foreach( $result_array as $key -> $value ) {
    echo "Key = " . $key  . "<br />";       // outputs field name
    echo "Value = " . $value . "<br />";    // outputs the value
}

不要忘记使用 $wpdb-&gt;prepare() 转义所有输入 http://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_SQL_Injection_Attacks

【讨论】:

  • 我使用了你的代码,它不再给我错误。但它确实告诉我'从...中的空值创建默认对象'这没有意义,因为表中有行。
  • 我将其更改为 foreach ($result_array as $row),它终于可以正常工作了。我读过代码,像这样调用'$row->date',但它只能像这样'$row['date']'起作用。
  • 好吧,如果您选择结果为对象(默认选项),您应该使用 $row->date。如果您选择结果为关联数组,那么您应该使用 $row['date'] 。但我不知道为什么它给了你这个错误。(执行我的英语)
【解决方案2】:

首先要在插件中使用wpdb 类,您需要在开头包含wp-blog-header.phpwp-load.php

然后您需要将 wpdb 定义为全局以访问其所有功能

global $wpdb;
$query = $wpdb->get_results("SELECT * FROM admin WHERE user_id = '$userid'");

确保您包含上述文件的正确路径

如果您想以数组形式获取结果,您需要将查询中的第二个参数作为ARRAY_A or ARRAY_N 传递

$query = $wpdb->get_results("SELECT * FROM admin WHERE user_id = '$userid'",ARRAY_N);

默认设置为返回OBJECT

【讨论】:

  • 还是什么都没有! $your_db_name = $wpdb->前缀。 'jo_plugin_options';全球 $wpdb; $query = $wpdb->get_results("SELECT * FROM {$your_db_name} WHERE user_id = {$userid}",ARRAY_N);返回数组(0){}
  • 当您在 phpmyadmin 中运行此查询时,您会得到结果吗?尝试回应您的查询
  • 如果你在插件中包含wp-blog-headerwp-load,你就是doing_it_wrong(),大错特错...
  • 我确实包含了 blog_header,因为 djanuj 建议了它。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2012-11-17
  • 2011-09-08
  • 2018-04-13
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多