Php MySql查询不同的输入字段,其中一些字段为空
您好,我在输入表单上有3个字段,它们通过POST方法设置为外部phpPhp 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=
$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中选择*相同”。