【发布时间】:2018-06-08 14:35:22
【问题描述】:
我从表单中收到一些变量:
$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 但没有结果。
【问题讨论】:
-
错误非常明显,你不能将数组传递给函数,它必须是一个字符串。确认您传递给它的内容实际上是一个字符串。
-
@Script47 你的意思是我应该改变` 'value' => array($start, $end),` 到
'value' => $start, $end,? -
试一试然后发现,我实际上并没有正确地查看你的代码。
-
顺便说一句,您可以通过使用准备好的语句错过转义方面。
-
而不是使用 mysqli_real_escape_string 查看带有绑定参数的准备好的语句。这是将用户数据放入查询的首选方法。使用不同的数据多次执行相同的查询时效率更高,并且有助于消除人为错误,以防您忘记转义您认为可以使用的 15 个列表中的单个变量。