首先,永远不要像以前那样构建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 ) );