Php 警告:mysqli_real_escape_string()要求参数2为字符串,数组给定

Php 警告:mysqli_real_escape_string()要求参数2为字符串,数组给定,php,wordpress,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) .

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

$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>';
如果我这样做:

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为字符串, 数组给定

以及所有文章的完整列表

我只需要在
自定义字段中找到我从
表单变量中获取的值的文章


我试图将
'type'=>'NUMERIC'
更改为
'type'=>'CHAR'
,但我只得到
警告,但没有结果。

要将此标记为已回答,需要向所述函数传递字符串而不是数组:

变,

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


正如我在评论中提到的,考虑使用它,它更安全,并且节省了逃避值。

如果只有两个值比较,在这种情况下,你可以设置多个元查询:


错误非常明显,不能将数组传递给函数,它必须是字符串。确认您传递给它的实际上是一个字符串。@Script47您的意思是我应该将`'value'=>数组($start,$end),`更改为
'value'=>$start,$end,
?试试看,我并没有正确地查看您的代码。顺便说一句,使用预处理语句可能会遗漏转义方面。不要使用mysqli\u real\u escape\u string,而是查看带有绑定参数的预处理语句。这是将用户数据放入查询的首选方法。当使用不同的数据多次执行同一个查询时,它会更有效,并且有助于消除人为错误,以防您忘记转义15个您认为可以使用的列表中的一个变量。在旁注中,如果我刷新页面,如何保留变量?如果我需要的话,我不知道如何使用会话。你能提供一个准备好的语句的示例吗?“你能提供一个准备好的语句的示例吗?”-我提供的链接有很多关于如何使用它们的示例。听起来可能有些刺耳,但阅读手册比我告诉你的要好得多,原因有两个,手册是源代码,所以它会更深入,让你学习并变得自力更生。“如果我刷新页面,我将如何保留变量?”—很多方式,cookie、会话、db或文件。如果我这样做,
$start$结束,
我得到的结果是零,如果我做了
$start,$end,
我只得到了关于
$start
的结果,这实际上是一种更好的方法,我需要使用而不是使用或使用。我会接受的,谢谢
<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'

            )
        )
    )
);
'value'   => array($start, $end),
'value'   => $start . $end,
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',
            )
        )
    )
);