Php MySql查询不同的输入字段,其中一些字段为空

Php MySql查询不同的输入字段,其中一些字段为空,php,mysql,Php,Mysql,您好,我在输入表单上有3个字段,它们通过POST方法设置为外部php $id=$_POST['id']; $nombre=$_POST['nombre']; $cedula=$_POST['cedula']; 其中,我想根据哪个字段中有数据,或者如果用户将数据放在所有3个字段中,或者只放在2个字段中,从有结果的同一表中非空字段的输入字段中进行搜索,来进行搜索 我的sql查询是这样的$sql=“SELECT*FROM userID=$id和nombre=$nombre和cedula=

您好,我在输入表单上有3个字段,它们通过POST方法设置为外部php

 $id=$_POST['id']; 
 $nombre=$_POST['nombre']; 
 $cedula=$_POST['cedula']; 
其中,我想根据哪个字段中有数据,或者如果用户将数据放在所有3个字段中,或者只放在2个字段中,从有结果的同一表中非空字段的输入字段中进行搜索,来进行搜索

我的sql查询是这样的
$sql=“SELECT*FROM userID=$id和nombre=$nombre和cedula=$cedula)”

很明显,哪一个不起作用,我应该怎么做才能使它起作用。我是否只需要更改查询,或者我需要在查询之前放置一些内容来首先检查哪些内容不是空的。谢谢

尝试添加报价:

$sql = "SELECT * FROM users WHERE userID = ".$id." AND nombre = ".$nombre." AND pass = '".$pass."' ";

首先,您的SQL语句应该更新为在字符串值周围加上“
(逗号)

因此,将其修改为:

$sql = "SELECT * FROM users WHERE userID = '$id' AND nombre = '$nombre' AND pass = '$pass'";
// ----------------------------------------^---^--------------^-------^------------^-----^
第二件事是,您应该只在字段有值时才搜索它,否则,它就没有用处了

因此,修改后的PHP代码应该是:

$sql = "SELECT * FROM users WHERE 1 ";

if (!empty($id)) {
  $sql .= " AND userID = '$id' ";
}
if (!empty($nombre)) {
  $sql .= " AND nombre= '$nombre' ";
}
if (!empty($pass)) {
  $sql .= " AND pass= '$pass' ";
}

只有在表单中填写了数据时,才会搜索数据库中的字段。

是的,您需要在前面加一个复选框,该复选框将忽略空字段


此外,如果是
VARCHAR
CHAR
类型,则需要将
$variable
放在单引号
中。

$pass
中存储什么??您在哪里声明了它?实际上,您应该停下来,后退几步,开始学习使用支持参数化查询的现代MySQL API,例如PDO或MySQLi。假设这是为
mysql\u query()
绑定的,它对SQL注入是脆弱的,并且API已被弃用。当绑定为参数时,即使为null,它也会成为非查询中断场景(无论是否获得预期结果)。从这里开始:所有代码都在受服务器密码保护的成员区域内。关于sql注入,有一个问题是,这里的逻辑是什么,其中1=1是什么?我们只在发布了一些值时才添加条件。比如说,如果您没有发布任何值,那么我们需要从DB表中选择所有记录。“其中1”不会产生任何错误,与“从tbl中选择*相同”。