0

2 つの日付の間に支払われたレコードを選択する SQL クエリがあります。

クエリを作成する方法は次のとおりです。

$qry = array();
    $qry[] = "SELECT DISTINCT 2 AS Record_Type, wp_woocommerce_order_items.order_id As Order_Id, First_Name;
    $qry[] = "FROM  wp_woocommerce_order_items";
    $qry[] = "LEFT JOIN (SELECT meta_value As First_Name, post_id FROM wp_postmeta WHERE meta_key = '_shipping_first_name') AS a";
    $qry[] = "ON wp_woocommerce_order_items.order_id = a.post_id";
    $qry[] = "RIGHT JOIN (SELECT post_id FROM wp_postmeta WHERE meta_key = '_paid_date' AND meta_value > " .$_POST['debut'] . " AND meta_value < " . $_POST['fin'] . ") AS m";
    $qry[] = "ON wp_woocommerce_order_items.order_id = m.post_id";
    $qry[] = "WHERE wp_woocommerce_order_items.order_item_type = 'line_item'";
    $qry[] = "ORDER BY wp_woocommerce_order_items.order_id";

問題は、RIGHT JOIN 行の POST 変数にあります。$_POST['debut'] と $_POST['fin'] の代わりに日付をハードコードすると、探している結果が得られます。

したがって、私の問題は、PHP POST 変数からの連結にあると思います。

誰でも私を助けることができますか?

4

2 に答える 2

3

たとえば、代わりに値を引用する必要があります

$qry[] = "RIGHT JOIN (SELECT post_id FROM wp_postmeta WHERE meta_key = '_paid_date' AND meta_value > " .$_POST['debut'] . " AND meta_value < " . $_POST['fin'] . ") AS m";

使用する

$qry[] = "RIGHT JOIN (SELECT post_id FROM wp_postmeta WHERE meta_key = '_paid_date' AND meta_value > '" .$_POST['debut'] . "' AND meta_value < '" . $_POST['fin'] . "') AS m";

また、 mysql_real_escape_stringまたは SQL インジェクション攻撃を回避するその他の方法を探してください。

于 2013-05-28T14:45:07.950 に答える