【发布时间】:2019-08-06 21:55:39
【问题描述】:
我使用以下方法在一列中搜索一个值。
/**
* @param array $searchArray
* @return array
*/
private static function returnPetSearchResults(array $searchArray): array
{
global $wpdb;
$qry = "SELECT ID
FROM {$wpdb->pets}
WHERE softDelete = 0
AND isAdopted = 0";
$parameters = [];
if ($searchArray['status'] !== '') {
$qry .= " AND status = %d";
$parameters[] = $searchArray['status'];
}
if ($searchArray['type']) {
$qry .= " AND type = %d";
$parameters[] = $searchArray['type'];
}
if ($searchArray['size']) {
$qry .= " AND size = %d";
$parameters[] = $searchArray['size'];
}
if ($searchArray['keyword']) {
$qry .= " AND name LIKE %s";
$parameters[] = '%'.$searchArray['keyword'].'%';
}
if ($searchArray['startDate']) {
$date = date('Y-m-d', strtotime($searchArray['startDate']));
$qry .= " AND dateEntered > %s";
$parameters[] = $date;
}
if ($searchArray['quarantineStatus'] != '') {
$qry .= " AND quarantineStatus = %d";
$parameters[] = $searchArray['quarantineStatus'];
}
if ($searchArray['kennel'] != '') {
$qry .= " AND kennel = %s";
$parameters[] = $searchArray['kennel'];
}
if ($searchArray['domain']) {
$qry .= " AND domain = %s";
$parameters[] = $searchArray['domain'];
}
$qry .= " ORDER BY ID DESC";
$sql = $wpdb->prepare($qry, $parameters);
return $wpdb->get_results($sql,OBJECT);
}
现在我想扩展为跨多个列搜索单个值。我在网上搜索过,您可以看到我尝试过的几个注释掉的示例。
/**
* @param array $searchArray
* @return array
*/
private static function returnPetSearchResults(array $searchArray): array
{
global $wpdb;
$qry = "SELECT ID
FROM {$wpdb->pets}
WHERE softDelete = 0
AND isAdopted = 0";
$parameters = [];
if ($searchArray['status'] !== '') {
$qry .= " AND status = %d";
$parameters[] = $searchArray['status'];
}
if ($searchArray['type']) {
$qry .= " AND type = %d";
$parameters[] = $searchArray['type'];
}
if ($searchArray['size']) {
$qry .= " AND size = %d";
$parameters[] = $searchArray['size'];
}
if ($searchArray['keyword']) {
$qry .= " AND name LIKE %s";
$parameters[] = '%'.$searchArray['keyword'].'%';
}
// if ($searchArray['keyword']) {
// $qry .= " WHERE name LIKE %s AND previousOwner LIKE %s";
// $parameters[] = '%'.$searchArray['keyword'].'%';
// }
// if ($searchArray['keyword']) {
// $qry .= " WHERE name = %s OR previousOwner = %s";
// $parameters[] = '%'.$searchArray['keyword'].'%';
// }
if ($searchArray['startDate']) {
$date = date('Y-m-d', strtotime($searchArray['startDate']));
$qry .= " AND dateEntered > %s";
$parameters[] = $date;
}
if ($searchArray['quarantineStatus'] != '') {
$qry .= " AND quarantineStatus = %d";
$parameters[] = $searchArray['quarantineStatus'];
}
if ($searchArray['kennel'] != '') {
$qry .= " AND kennel = %s";
$parameters[] = $searchArray['kennel'];
}
if ($searchArray['domain']) {
$qry .= " AND domain = %s";
$parameters[] = $searchArray['domain'];
}
$qry .= " ORDER BY ID DESC";
$sql = $wpdb->prepare($qry, $parameters);
return $wpdb->get_results($sql,OBJECT);
}
在多列中有效地搜索单个字符串值时我缺少什么?
【问题讨论】:
-
不知道为什么,但是当我使用你的建议时,sql 查询没有返回任何结果
-
我不需要将多个变量绑定到
parameters数组吗? -
你能提供一个带有多个参数的官方答案吗?我没有在这里连接点,希望您的帮助。