我从表单中收到一些变量:
$start = $_POST['startDate'];
$start = explode(",", $start);
$end = $_POST['endDate'];
$end = explode(",", $end);
然后如果我检查数组:
echo '<pre>' . var_export($start, true) . '</pre>';
echo '<pre>' . var_export($end, true) . '</pre>';
我明白了:
array (
0 => '1984',
)
array (
0 => '2017',
)
如果我这样做:
<h2><?php echo $start; ?>, <?php echo $end; ?></h2>
我得到空白的结果。
但我做以下情况很好:
<h2><?php foreach($start as $st) { echo $st; } ?>, <?php foreach($end as $en) { echo $en; } ?></h2>
但是,我之后正在运行查询:
query_posts(
array(
'post_type' => 'post',
'order' => 'ASC',
'posts_per_page' => -1,
'cache_results' => false,
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
'meta_query' => array(
array(
'key' => 'usp-custom-14',
'value' => array($start, $end),
'compare' => 'IN',
'type' => 'NUMERIC'
)
)
)
);
结果是警告:
警告:mysqli_real_escape_string()期望参数2为字符串, 数组给出......
所有文章的整个列表。
我只需要找到custom field
中form variable
我尝试将'type' => 'NUMERIC'
更改为'type' => 'CHAR'
,我只收到warning
但没有结果。
答案 0 :(得分:0)
要将此标记为已应答,您需要将字符串而不是数组传递给所述函数:
更改,
'value' => array($start, $end),
要
'value' => $start . $end,
正如我的评论中所提到的,考虑使用prepared statements代替它,它更安全,使您不必转义值。
答案 1 :(得分:0)
如果您只有两个值可供比较,就像在这种情况下您可以设置多个元查询:
query_posts(
array(
'post_type' => 'post',
'order' => 'ASC',
'posts_per_page' => -1,
'cache_results' => false,
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'usp-custom-14',
'value' => $start[0],
'compare' => 'LIKE',
),
array(
'key' => 'usp-custom-14',
'value' => $end[0],
'compare' => 'LIKE',
)
)
)
);