自定义表中的WordPress筛选器工作不正常

时间:2019-04-21 作者:gaurav mishra

我想从自定义WordPress表中筛选出准确的信息,无论用户是否填写了所有文本框。我使用了一个LIKE查询,但如果用户留下了一个或两个框,但在所有框都已填充的情况下工作正常,则无法正常工作。我也使用了or查询,但这太不起作用了。

$table_name = $wpdb->prefix . "credofy_contact_form";
$sql_query = "SELECT * FROM $table_name WHERE your_name LIKE \'$name\' AND your_email LIKE \'$email\' AND your_phone LIKE \'$phone\' AND your_hobby LIKE \'$hobby\'";

enter image description here

2 个回复
SO网友:Krzysiek Dróżdż

首先,永远不要像以前那样构建SQL查询-将SQL与原始变量连接起来是不安全的,它会导致SQL注入漏洞。您应该始终准备所有查询。

至于问题的主要部分。。。您在查询中使用AND运算符,因此它将只检索满足所有条件的行(因此每个字段都必须像给定的值,所以名称必须像给定的名称,电子邮件必须像给定的电子邮件,等等)。

如果将和改为或,则它将匹配满足这些条件的行。

但如果我正确理解了你的问题,那么用户是在填写过滤表单,对吗?所以,如果我只填写电子邮件,那么我应该得到与给定电子邮件匹配的所有行,如果我填写两个字段,那么我应该得到与这两个字段匹配的行。

在这种情况下,您必须动态构造查询:

$table_name = $wpdb->prefix . "credofy_contact_form";
$sql = "SELECT * FROM $table_name WHERE 1=1 ";
$params = [];
if ( trim($name) ) {
    $sql .= " AND your_name LIKE %s";
    $params[] = $wpdb->esc_like($name);
}
... // same for other fields 
$results = $wpdb->get_results( $wpdb->prepare( $sql, $params ) );

SO网友:Awais

您可能想使用OR 操作员代替AND e、 g。

$sql_query = "SELECT * FROM $table_name WHERE your_name LIKE \'$name\' OR your_email LIKE \'$email\' OR your_phone LIKE \'$phone\' OR your_hobby LIKE \'$hobby\'";
AND 当所有条件都应满足标准时使用运算符OR 即使符合单个标准,操作员也会工作。

具有LIKE 操作员也可以使用wild cards

相关推荐

如何为更好的链接创建php url重定向

我正在寻找一种方法,使我的网站上的子公司链接的URL重定向。类似于:site.com/go/keyword我知道有很多插件可以做这个,但我不喜欢插件,我喜欢学习新东西。我设想每个帖子有2个自定义字段,其中包括:要重定向到的关键字url,但我不知道如何处理此重定向文件。欢迎提供任何帮助或建议。谢谢