【问题标题】:Query on a custom table Wordpress查询自定义表格 Wordpress
【发布时间】:2018-08-20 08:35:36
【问题描述】:

我正在尝试做一个受令牌限制的页面。我在 Wordpress 数据库上创建了一个自定义表,我正在尝试使用它,但我不知道它在哪里不起作用。我从头开始创建此页面,而不是在 Wordpress 的帮助下。

代码如下:

global $wpdb;

if(isset($_GET['tkn'])){
   $token = $_GET['tkn'];
   $today = date("Y-m-d");

   $resultat = $wpdb->get_row('SELECT token_name, token_dateexp FROM {$wpdb->prefix}token WHERE token_name = \''.$token.'\'', ARRAY_A);
}

问题是,当我使用echo $resultat['token_name'].' '.$resultat['token_dateexp']; 时,它什么也没有返回。 似乎即使我使用global $wpdb 我的查询也不起作用。 我尝试使用$resultat = $wpdb->get-results('SELECT * FROM {$wpdb->prefix}token', ARRAY_A);,但得到了相同的结果。

谁能解释我哪里错了? 谢谢。

【问题讨论】:

  • 您是否执行了查询并确认令牌存在?
  • {$wpdb->prefix}token 在单引号中不起作用,您的查询应该是 $resultat = $wpdb->get-results("SELECT * FROM {$wpdb->prefix}token", ARRAY_A);
  • wordpress 查询非常痛苦。也可以尝试wordpress.stackexchange.com 解决您可能遇到的与 wordpress 相关的问题。
  • 你的表名是什么??
  • 谢谢@Noman!有效。我确定令牌存在,但这是我的查询错误。

标签: php sql database wordpress


【解决方案1】:

始终准备好您的查询。请。尽管 wordpress 方法在底层是 hacky 的。

if(isset($_GET['tkn'])){
   $token = $_GET['tkn'];
   $today = date("Y-m-d");
   $table = "${wpdb->prefix}token";
   $query = $wpdb->prepare("SELECT token_name, token_dateexp FROM $table WHERE token_name = %s", $token);
   $resultat = $wpdb->get_row($query, ARRAY_A);
}

此外,您在查询中使用了单引号。 PHP 确实评估单引号字符串中的变量。在双引号字符串中 PHP 会这样做。

$term = 'world';
echo "Hello $term"; // outputs Hello world
echo 'hello $term'; // outputs Hello $term

【讨论】:

  • 好建议伙伴:)
  • 我刚开始接触 PHP 和 Wordpress 代码,感谢您的建议。我会记得使用双引号而不是单引号。
  • @Panchoa 向我保证,您将永远使用除表名或字段名之外的查询变量作为内联字符串变量。使用$wpdb->preparedeveloper.wordpress.org/reference/classes/wpdb/prepare 将变量和所有用户输入插入到查询中。请成为一个安全的插件编码器。可能看起来很麻烦,但它有助于从一开始就以正确的方式做到这一点。
  • 是的,我保证。我不知道该怎么做,但谢谢你现在我知道了。我同意最好的开始方式是做正确的方式,这是最安全的方式。
  • 当然,我会记住这一点。我总是渴望学习新东西并以正确的方式去做。完成后,我会将其发布在 codereview 上!
猜你喜欢
  • 2014-08-13
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2013-07-25
  • 2019-11-14
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多