警告:mysqli_real_escape_string()期望参数2为字符串,给定数组

时间:2018-06-08 04:21:20

标签: php wordpress

我从表单中收到一些变量:

$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 fieldform variable

得到的值的文章

我尝试将'type' => 'NUMERIC'更改为'type' => 'CHAR',我只收到warning但没有结果。

2 个答案:

答案 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',
            )
        )
    )
);