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 に答える
-1

数値を確認$fromしてください。$to

次に、SQL クエリから一重引用符を削除します。

于 2013-09-23T08:18:56.220 に答える