【发布时间】:2016-01-18 06:23:48
【问题描述】:
更新 1
$addressbits 内爆似乎存在问题。我手动添加了两个变量,然后搜索了一个以确保它不起作用,它失败了,然后输入了两个值并且搜索成功了。
更新 2
经过更多测试后,我发现如果数组中有多个项,prepare 函数会消除第二个内爆,不确定这是否是一个错误,但它确实很烦人。我正在考虑在数组创建函数中运行准备函数以进行清理,然后将其打印到查询中。
我正在为 wordpress 网站中的自定义表格构建搜索表单。我正在尝试将多个术语从文本字段传递到一个数组,然后将它们传递到 $wpdb->prepare() 进行清理。到目前为止,我的代码恰好一个术语可以正常工作...但是如果我再添加,它将无法正常工作,就好像没有为该字段输入任何术语。我最初认为这可能是尾随逗号的问题,但添加代码修剪不起作用,我什至用逗号连接以确保它们的存在,然后用 rtrim() 修剪,仍然不起作用。我还添加了逗号而不是修剪,仍然因多个术语而失败。我打开了错误报告,没有任何显示。
#explode search field values
$addressinput = explode(" ", $_GET['address']);
#create inputs for prepare
$addressbits = array();
foreach ($addressinput as $input) {
$input = trim($input);
if (!empty($input)) {
$addressbits[] = $input ;
}
}
#create prepare statements
$addressclean = array();
foreach ($addressinput as $clean) {
$clean = trim($clean);
if (!empty($clean)) {
$addressclean[] = " and `display-address` LIKE '%%%s%%'";
}
}
#if field is not empty, build and execute prepare statement, set variable
if (isset($_GET['address'])) {
$displayaddress = $wpdb->prepare( implode( $addressclean ) , implode(',' , $addressbits));
} else {
$displayaddress = '';
}
#query with pagination code
$customPagHTML = "";
$query = "select * from `record-display` where" . $code . $displayaddress . $format . $name . " ORDER BY `date` DESC";
$total_query = "SELECT COUNT(1) FROM (${query}) AS combined_table";
$total = $wpdb->get_var( $total_query );
$items_per_page = 10;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
$offset = ( $page * $items_per_page ) - $items_per_page;
$result = $wpdb->get_results( $query . " LIMIT ${offset}, ${items_per_page}", ARRAY_A );
$totalPage = ceil($total / $items_per_page);
【问题讨论】: