0

PHP(wordpress)中查询的空结果,但是当我从 PHPMyAdmin 运行 SQL 查询时,它可以工作!这是代码的一部分,它返回空数组

<?php
global $wpdb; 
$from = $_POST['amount'];
$to = $_POST['amount1'];

$query = "SELECT  post_content
FROM `wp_postmeta`
INNER JOIN `wp_posts` ON wp_posts.ID = wp_postmeta.post_id
WHERE meta_key = 'product_price'
AND meta_value > '$from'
AND meta_value < '$to'";

$results = $wpdb->get_results($query);;
var_dump($results);  // empty array
?>

任何人都可以解释我的问题吗?谢谢 !

4

3 回答 3

1

我相信这样做的原因是有关 meta_value 列的子句的输入被视为字符串。您需要将它们视为数字。

看看 Wordpress 中的 'query_posts' 功能。

$args = array(
  'meta_query'=> array(
    array(
      'key' => 'product_price',
      'compare' => '>',
      'value' => $from,
      'type' => 'numeric'
    ),
    array(
      'key' => 'product_price',
      'compare' => '<',
      'value' => $to,
      'type' => 'numeric'
    )
  )
  'posts_per_page' => 100
) );

query_posts( $args );

或者,将您的输入视为数字,而不是字符串。在原始查询中删除它们周围的单引号。

global $wpdb; 
$from = $_POST['amount'];
$to = $_POST['amount1'];

$query = "SELECT  post_content
FROM `wp_postmeta`
INNER JOIN `wp_posts` ON wp_posts.ID = wp_postmeta.post_id
WHERE meta_key = 'product_price'
AND meta_value > $from
AND meta_value < $to";

$results = $wpdb->get_results($query);
var_dump($results);

我仍然强烈建议你养成清理输入的习惯。

第一个解决方案的另一个好处是 query_posts 函数将根据提供的输入类型自动清理您的输入。

参考:

于 2013-09-23T08:09:35.497 回答
0

我真的很关心安全性,所有的答案都没有人关心,所以我为此添加了最好的解决方案,因为你永远不应该相信你总是需要验证它的输入。

下面应该是一个很好的工作解决方案。

你也应该阅读这个这个

<?php
global $wpdb; 
$from = $_POST['amount'];
$to = $_POST['amount1'];

$query = "SELECT  post_content
FROM `wp_postmeta`
INNER JOIN `wp_posts` ON wp_posts.ID = wp_postmeta.post_id
WHERE meta_key = 'product_price'
AND meta_value > %d
AND meta_value < %d";

$results = $wpdb->get_results($wpdb->query($wpdb->prepare($query, $from, $to));
var_dump($results); 
?>
于 2014-01-24T16:57:42.657 回答
-1

确保$from$to具有数值。

然后从 SQL 查询中删除单引号。

于 2013-09-23T08:18:56.220 回答