在Wordpress中选择Mysql Meta_Value

时间:2016-03-09 20:58:47

标签: php mysql wordpress

为什么结果返回为空?怎么了?如果我直接使用phpmyadmin进行咨询,结果是正确的。

<?php $postid = get_the_ID(); ?>

<?php
$get_thumb = $wpdb->get_var
( "SELECT meta_value FROM `wp_postmeta` WHERE `post_id` = $postid AND  `meta_key` = '_wp_attached_file'" );
echo "<p>Thumb URL: {$get_thumb}</p>";
?>

PhpMyAdmin Consult!

2 个答案:

答案 0 :(得分:0)

我建议使用$ wpdb-&gt; prepare()语句来确保正确生成SQL查询并在查询中正确设置$ get_thumb变量。

$postid = get_the_ID();
$get_thumb = $wpdb->get_var($wpdb->prepare( 
 "SELECT meta_value FROM `wp_postmeta` WHERE `post_id` = %s AND  `meta_key` = '_wp_attached_file'",$postid));
echo "<p>Thumb URL: {$get_thumb}</p>";

同样,您可以始终记录prepare()生成的SQL字符串,以确保它符合您的期望。有关更多示例,请参阅https://codex.wordpress.org/Class_Reference/wpdb#Examples

答案 1 :(得分:0)

我认为您的语法有些麻烦,因此修改了原始查询。

<?php
     $get_thumb = $wpdb->get_var( 
         "
          SELECT meta_value 
          FROM wp_postmeta 
          WHERE post_id = " . $postid . " AND meta_key = _wp_attached_file
         "
      );
      echo "<p>Thumb URL: {$get_thumb}</p>";
?>

我确保PHP在查询中正确回显 - 我不确定这是否是您遇到的问题。

我也推荐准备好的查询。这是我认为正确的语法(我发现通过将它们放在$ query_arg_array中来准备项目是有帮助的)。请参阅https://codex.wordpress.org/Class_Reference/wpdb

$postid = get_the_ID();
$query_arg_array = [$postid];
$get_thumb = $wpdb->get_var($wpdb->prepare( 
 "
  SELECT meta_value 
  FROM wp_postmeta 
  WHERE post_id = %d AND meta_key = _wp_attached_file
  ",
  $query_arg_array
));

echo "<p>Thumb URL: {$get_thumb}</p>";

如果准备好的查询无效,请尝试直接将$postid作为参数而不是$query_arg_array

记住SQL是超级敏感的,所以即使是额外的空间也会丢失你的查询。