Php MySQL选择和或

Php MySQL选择和或,php,mysql,forms,select,Php,Mysql,Forms,Select,我的查询语句没有成功,我认为这与我执行它的方式有关 $query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or phone = '".$phone."'"; 基本上,当名字和姓氏与发布的名字和姓氏匹配时,我想从customer_det中选择all。如果没有张贴的名字和姓氏,那么我希望它选择所有张贴的电话号码匹配的地方。我的三个变量$fna

我的查询语句没有成功,我认为这与我执行它的方式有关

$query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or phone = '".$phone."'";
基本上,当名字和姓氏与发布的名字和姓氏匹配时,我想从customer_det中选择all。如果没有张贴的名字和姓氏,那么我希望它选择所有张贴的电话号码匹配的地方。我的三个变量$fname、$lname和$phone都设置为从前面的表单$\u POST['fname']读取;等等


这是正确的逻辑吗

没有使用正确的逻辑,因为它组合成一个查询。如果只使用了1个查询,则当这两个查询都未发布时,它将搜索
$fname=''
$lname=''
,以及$phone部分

尝试:


您现在执行的查询将返回姓名匹配的所有行和电话号码匹配的所有行。如果只想返回电话号码匹配的行,但仅当提交的名字和姓氏为空时,则需要将其添加到where子句中,如下所示:

$query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or ('".$fname."' = '' and '".$lname."' = '' and phone = '".$phone."'");
这确保了电话号码仅在提交的名字和姓氏都为空时用于匹配行,并且不需要对两个单独的查询进行编码

$query5 = "select * from ".$db_prefix."customer_det where (fname = '".$fname."' and lname = '".$lname."') or ('".$fname."' = '' and '".$lname."' = '' and phone = '".$phone."'");